将其他数据传递到我的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
}
我也不明白为什么我的请求网址在浏览器的开发工具下会是这样的:
http://server:80/api/v1/cars/Tesla.txt?{"model":"X"}
他将JSON放在请求网址的末尾,我认为这不是标准行为?
答案 0 :(得分:1)
只试用data:{model:model}
代替JSON.stringify({"model": model})
。查看更多信息http://api.jquery.com/jquery.ajax/
答案 1 :(得分:1)
为什么
通常get是一个查询字符串,其中数据通过URL传递,并附加到URL的变量和POST数据通过请求体传递POST后可以传递更多数据然后GET。在GET中,所有内容都必须是您网址的一部分,不能在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
处理get和POST数据
答案 2 :(得分:0)
以这种方式传递数据,数据:{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){}
});
});