0

我已经开始使用 Drupal 8 并使用 Drupal 团队实现的新控制器系统对服务器进行 ajax 调用。

当我定义路由并使用 jquery 进行 ajax 调用时,我的问题现在出现了。如果我将 dataType 设置为“json”,我会收到 404,但将其更改为“html”会起作用。

我的路线指向的函数如下所示:

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

我的响应/请求标头如下所示:

回复

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 是我定义的路由,它工作正常,如果我将 dataType 更改为“html”,这也可以工作,感觉很奇怪。

4

1 回答 1

1

感谢 Spokey 在评论中提供的非常重要的线索,我发现了问题,我的路线在 Drupal 中设置错误。我使用 _content 而不是 _controller。_controller 立即访问该函数,而无需添加大量标记开销。

因此,如果您自己遇到此问题,请确保您的 routes.yml 文件具有 _controller 设置,而不是 _content 设置。

于 2014-11-19T13:22:09.757 回答