我正在尝试使用 jquery (1.12.4) 的 $.ajax 方法将 json 数据发送到我的 Symfony2 Controller 。
我的 JavaScript:
var category_type = 2;
var json_data = JSON.stringify(category_type);
$.ajax({
type: "POST",
url: Routing.generate('homepage'),
contentType: 'application/json',
dataType: "json",
data: json_data,
beforeSend: function (xhr){
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success: function (result, status, xhr) {
console.log(result);
console.log(status);
},
error: function(xhr, status, error) {
console.log(error);
console.log(status);
}
});
我的 Controller :
/**
* @Route("/", name="homepage", options={"expose"=true})
*/
public function indexAction(Request $request) {
if($request->isXmlHttpRequest()){
$content = $this->get("request")->getContent();
$cat = json_decode($content, true);
var_dump($content);
exit;
}
else {
echo 'Sorry!';
exit;
}
但是我收到消息抱歉!每次。现在我不确定我是否使用了 xhr: setRequestHeader("X-Requested-With","XMLHttpRequest"),
正确。但如果没有它,我会得到相同的结果。
我还尝试删除 if/else
状况并尝试过$content = $this->get("request")->getContent();
。但是当我这样做时var_dump($content);
,我得到一个空字符串,即。 string '' (length=0)
问题:
- 为什么
$request->isXmlHttpRequest()
返回false
? - 如何设置请求 header ?
- 这是向服务器发送 json 数据的正确方法(
$.ajax
)吗? - 这是在 Controller 中接收数据的正确方法(
$this->get("request")->getContent();
)吗?
最佳答案
在 ajax 调用中尝试一下:
data: { json_data }
而不是:
data: json_data
如果您想查看请求中的 POST 数据,您必须执行以下操作:
dump($request->request);
=> 我建议您使用 dump
函数(SF 2.6 => 请参阅 doc 使用它)
编辑
尝试执行这个简单的调用,如果它有效,您只需使用自己的数据重现它即可:
var data = {"name":"John Doe"}
$.ajax({
dataType : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
success : function(result) {
alert(result.success); // result is an object which is created from the returned JSON
},
});
关于javascript - $request->isXmlHttpRequest() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585459/