$ request-> isXmlHttpRequest () возвращает false

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") я обычно не указываю ничего на стороне клиента ....
  • 0
    @Matteo Matteo Да, у меня есть. Но я получаю тот же результат.
Показать ещё 5 комментариев

1 ответ

1
Лучший ответ

Попробуйте в своем 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
    },
});
  • 0
    Я пробовал data: { json_data } но успех обратного вызова success: function (result, status, xhr) {alert(result);} дает нулевое значение
  • 0
    Если вы console.log ваш "json_data" до вызова ajax, он не пуст? А в вашем контроллере просто сделайте dump($request->request);exit;
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню