javascript - $request->isXmlHttpRequest() 返回 false

标签 javascript jquery json ajax symfony

我正在尝试使用 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)

问题:

  1. 为什么$request->isXmlHttpRequest()返回false
  2. 如何设置请求 header ?
  3. 这是向服务器发送 json 数据的正确方法( $.ajax )吗?
  4. 这是在 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/

相关文章:

javascript - 在附加到动态内容中的元素之前删除最后一个 TD

javascript - JSON 问题似乎应该有效

javascript - 在表中使用 X-Editable 内联

javascript - superagent 和 nock 如何协同工作?

javascript - jQuery wrap 函数 wrap 工作起来很奇怪

java - JSONException : A JSONObject text must begin with '{' at character 1 error in HTTPS POST response

java - 避免内存不足错误

javascript - AngularJS:如何在拖动 map 后获取标记的位置

php - 从不同的页面文件中显示和隐藏 DIV 类

javascript - 显示数组中的某些元素