Передача дополнительных данных на мой REST-сервер работает не очень хорошо.
У меня есть этот простой вызов ajax:
// Client
$(document).on('click', '#car', function(e){
e.preventDefault();
var name = $(this).data('name'); // Tesla
var model = $(this).data('model'); // X
$.ajax({
type: "GET",
contentType: 'text',
cache: false,
url: "http://server:80/api/v1/cars/" + name,
data: JSON.stringify({
"model": model
}),
success: function(data, textStatus, jqXHR){ },
error: function(jqXHR, textStatus, errorThrown){}
});
});
Проблема в том, что model
всегда NULL
на моем сервере, тогда как car
работает нормально. Я также var_dumped
весь запрос и искал model
но это не там, к сожалению.
// Server
public function show($request, $response, $args)
{
$model = $request->getParsedBody()['model'];
$name = $args['id'];
echo $model; // NULL
echo $name; // Tesla
}
Я также не понимаю, почему мой URL-адрес запроса выглядит так под инструментами разработки в браузере:
http://server:80/api/v1/cars/Tesla.txt?{"model":"X"}
Он помещает JSON в конец URL-адреса запроса, и я думаю, что это не стандартное поведение?
Зачем
Обычно get — это строка запроса, где данные передаются через URL с переменными, добавленными к URL, и POST, когда данные передаются через тело запроса, POST может передавать больше данных, чем GET. в GET все должно быть частью вашего URL, больше данных нельзя добавлять в POST, все ваши данные должны быть отправлены через тело сообщения
как простой
Your typical query String : http://example.com/over/there?name=ferret&sname=somethingelse
Yout would use $_GET['name'];
and For POST
URL:http://example.com/over/there
Message Body name=ferret&sname=somethingelse
$_POST['name'];
так в php у вас есть то, что называется $_REQUEST;
в jave вы бы использовали request.getParameters
который будет автоматически обрабатывать это для вас
этот $_REQUEST
обрабатывает как получить, так и POST-данные
Попробуй просто data:{model:model}
вместо JSON.stringify({"model": model})
, Смотрите больше информации http://api.jquery.com/jquery.ajax/
Передайте данные следующим образом: data: {model: JSON.stringify (model)},
$(document).on('click', '#car', function(e){
e.preventDefault();
var name = $(this).data('name'); // Tesla
var model = $(this).data('model'); // X
model = JSON.stringify(model);
$.ajax({
type: "GET",
contentType: 'text',
cache: false,
url: "http://server:80/api/v1/cars/" + name,
data: {model:model},
success: function(data, textStatus, jqXHR){ },
error: function(jqXHR, textStatus, errorThrown){}
});
});