2014-11-19 4 views
0

Я начал работать с Drupal 8 и совершать ajax-вызовы на сервер, используя новую систему контроллеров, реализованную командой Drupal.Jquery Ajax call работает с HTML, но не JSON

Проблема возникает, когда я определил маршрут, и я делаю вызов ajax с помощью jquery. Если я установил dataType на «json», я получаю 404, но смена его на «html» будет работать.

Функция мои точки маршрута, выглядит следующим образом:

function createResponse(){ 
    return new JsonResponse(['data' => 'test']); 
} 

Мой ответ/запрос-заголовков выглядеть следующим образом:

Response

Cache-Control must-revalidate, no-cache, post-check=0, pre-check=0, private 
Connection keep-alive 
Content-Encoding gzip 
Content-Language en 
Content-Type application/json 
Date Wed, 19 Nov 2014 12:20:35 GMT 
Expires Sun, 19 Nov 1978 05:00:00 GMT 
Keep-Alive timeout=10 
Server nginx 
Transfer-Encoding chunked 
Vary Accept-Encoding 
X-Powered-By PHP/5.5.18-1~dotdeb.1 
X-UA-Compatible IE=edge,chrome=1 

заголовка запроса

Accept application/json, text/javascript, */*; q=0.01 
Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Content-Length 9 
Content-Type application/json; charset=utf-8 
Host d8test.local 
Referer http://d8test.local/ 
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 
X-Requested-With XMLHttpRequest 

Является ли этот Drupal 8 конкретным? Есть ли какая-то глупая переменная, запрещающая json xmlhttprequests? Я могу нормально добраться до маршрута, путешествуя по маршруту, и я могу получить данные с помощью html, но мне это действительно нужно в json-формате.

Это код JQuery:

jQuery.ajax({ 
     url: drupalSettings.path.basePath + "testAjax", 
     type: "post", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: {'type' : 'list'}, 
     success: function(data){ 
      console.log(data); 
     } 
}); 

testAjax является маршрут я определил, это работает отлично, и это также будет работать, если изменить тип данных для «HTML» что-то, что чувствует себя очень странно.

+0

dataType ничего не меняет для запроса, это как раз то, как он имеет дело с результатом. Вы можете показать функцию ajax? Вы уверены, что не получаете ошибку на стороне сервера? – Spokey

+0

Я обновил свое оригинальное сообщение тем, что вы просили, однако я получаю правильный ответ, если я устанавливаю dataType в html вместо json. Это заставляет меня подозревать, что Друпал что-то расстроен. – Undrium

+1

Вы можете проверить маршрут или разместить его здесь? Вы установили _controller и _format? Я помню, где-то видел это. Если вы не получите свой ответ здесь, вы можете проверить http://drupal.stackexchange.com/. Эта проблема возникла где-то там – Spokey

ответ

1

Благодаря очень важным подсказкам от Spokey в комментариях я обнаружил проблему, мой маршрут был неправильно установлен в Drupal. Вместо _controller я использовал _content. _controller немедленно обращается к функции без добавления большого количества разметки-накладных расходов.

Итак, если вы столкнулись с этой проблемой самостоятельно, убедитесь, что ваш файл routes.yml имеет параметр _controller, а не _content.