У меня проблема с Slim Framework и запросом PUT. У меня есть сценарий litte jQuery, который будет обновлять время истечения срока действия при нажатии кнопки.
$("#expiry-button").click(function(event) { event.preventDefault(); $.ajax({ url: 'http://www.domain.com/expiry/38/', dataType: 'json', type: 'PUT', contentType: 'application/json', data: {aid:'38'}, success: function(){ var text = "Time updated"; $('#expiry').text(text).addClass("ok"); }, error: function(data) { var text = "Something went wrong!"; $('#expiry').text(text).addClass("error"); } }); });
Я всегда получаю «Что-то пошло не так!»
В моем index.php, где я настроил Slim, у меня есть это
$app->put('/expiry/:aid/', function($aid) use($app, $adverts) { $id = $app->request()->put($aid); $adverts->expand_ad_time($id["aid"]); });
если я var_dump($id)
я получаю NULL
Заголовок ответа выглядит следующим образом:
Status Code: 200 Pragma: no-cache Date: Wed, 08 May 2013 12:04:16 GMT Content-Encoding: gzip Server: Apache/2.2.16 (Debian) X-Powered-By: PHP/5.3.3-7+squeeze15 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Transfer-Encoding: chunked Connection: Keep-Alive Keep-Alive: timeout=15, max=100 Expires: Thu, 19 Nov 1981 08:52:00 GMT
и орган запроса
Request Url: http://www.domain.com/expiry/38/ Request Method: PUT Status Code: 200 Params: { "aid": "38" }
Таким образом, сообщение есть, но не желаемый результат. Что я делаю не так?
Сначала вы должны проверить данные json, потому что это неверно: http://jsonlint.com/ Попробуйте с этим: {"help": "38"}
Если вам нужны данные JSON, я бы сделал что-то вроде этого:
$app->put('/expiry/:aid/', function($aid) use($app, $adverts) { // Decode the request data $test = json_decode($app->getInstance()->request()->getBody()); echo $test->aid; // from the JSON DATA });
Если вы хотите получить номер из url / expiry / 38 /, то вы можете получить его из переменной $ aid, которую вы передали функции
$app->put('/expiry/:aid/', function($aid) use($app, $adverts) { echo $aid; // from the url });
Надеюсь, это поможет вам