Javascript $request->;isXmlHttpRequest()返回false
我试图使用jquery(1.12.4)的$.ajax方法将json数据发送到我的Symfony2控制器 我的javascript:Javascript $request->;isXmlHttpRequest()返回false,javascript,jquery,json,ajax,symfony,Javascript,Jquery,Json,Ajax,Symfony,我试图使用jquery(1.12.4)的$.ajax方法将json数据发送到我的Symfony2控制器 我的javascript: var category_type = 2; var json_data = JSON.stringify(category_type); $.ajax({ type: "POST", url: Routing.generate('homepage'),
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);
}
});
我的控制器:
/**
* @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(“请求”)->getContent()代码>。但当我做var_dump($content)时代码>,我得到一个空字符串,即字符串“”(长度=0)
问题:
为什么$request->isXmlHttpRequest()
返回false
如何设置请求头
这是向服务器发送json数据的正确方法吗($.ajax
)
这是在控制器中接收数据的正确方法($this->get(“request”)->getContent();
)吗
在ajax调用中尝试:
data: { json_data }
而不是:
data: json_data
如果您想查看请求中的POST数据,则必须执行以下操作:
dump($request->request);
=>我建议您使用dump
功能(SF 2.6=>请参阅以使用它)
编辑
尝试执行这个简单的调用,如果成功,您只需使用自己的数据重现该调用:
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
},
});
您是否尝试过不使用xhr:setRequestHeader(“X-Requested-With”,“XMLHttpRequest”)
i通常不在客户端指定任何内容……@Matteo是的,我有。但是我得到了同样的结果。@Matteo检查这篇文章的第二个答案你的Web服务器/proxy/cacheManager可以过滤一些http头吗?@Matteo我不知道如何检查。我尝试了data:{json_data}
但是成功回调success:function(result,status,xhr){alert(result);}
如果您console.log
在ajax调用之前的“json_数据”不为空,则给出空值?在您的控制器中,只需执行转储($request->request);退出代码>也尝试了这个。结果是第34行的DefaultController.php:ParameterBag{#9▼ #参数:[]}
谢谢您的回答:)