$ request-> isXmlHttpRequest()返回false

时间:2016-07-26 09:02:17

标签: javascript jquery json ajax symfony

我正在尝试使用jquery的$ .ajax方法(1.12.4)将json数据发送到我的Symfony2控制器。

我的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);
            }
        });

我的控制器:

 /**
 * @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. 如何设置请求标头?
  3. 这是将json数据发送到服务器($.ajax)的正确方法吗?
  4. 这是在控制器($this->get("request")->getContent();)中接收数据的正确方法吗?

1 个答案:

答案 0 :(得分:1)

在你的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
    },
});