2016-07-26 3 views
0

Я пытаюсь отправить данные json на свой контроллер Symfony2, используя метод $ .ajax jquery (1.12.4).

Мой 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();)?
+0

Вы пробовали без строки 'xhr: setRequestHeader (« X-Requested-With »,« XMLHttpRequest »)' я обычно не указываю ничего на стороне клиента .... – Matteo

+0

@Matteo Да, у меня есть. Но я получаю тот же результат. – utkarsh2k2

+0

@Matteo проверить второй ответ в этом сообщении http://stackoverflow.com/questions/4658789/symfony-request-isxmlhttprequest-issue – utkarsh2k2

ответ

1

Попробуйте его в Ajax вызова:

data: { json_data } 

вместо:

data: json_data 

И если вы хотите увидеть данные POST из запроса вы должны сделать это:

dump($request->request); 

=> Советую использовать функцию dump (SF 2. 6 => см doc использовать)

EDIT

Попробуйте сделать это простой вызов, и если он вас работает просто воспроизвести это с вашими собственными данными:

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 
    }, 
}); 
+0

Я попытался 'data: {json_data}', но успешный обратный вызов 'success: function (result, status, xhr) {alert (result);}' дает значение null – utkarsh2k2

+0

Если вы 'console.log' свой« json_data »перед ajax звоните, это не пусто?И в вашем контроллере просто сделайте 'dump (запрос $ request->); exit;' – DOZ

+0

попробовал это. Результатом является 'DefaultController.php в строке 34: ParameterBag {# 9 ▼ #parameters: [] }' – utkarsh2k2

Смежные вопросы