我已经开始使用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"感觉非常奇怪的东西。
答案 0 :(得分:1)
感谢Spokey在评论中发现了非常重要的线索,我发现了问题,我的路线在Drupal中被错误地设置了。而不是_controller我使用_content。 _controller立即访问该函数,而不会增加大量的标记开销。
因此,如果您自己遇到此问题,请确保您的routes.yml文件具有_controller设置而不是_content设置。