关于javascript:Ajax成功函数无法使用返回的json数据和状态200/304

Ajax success function not working with returned json data and status 200/304

我正在进行一个返回JSON对象的AJAX调用,并成功地在浏览器中使用JSON。 但是,成功函数没有被触发,而是命中了错误块,并且只显示"错误"的消息,这个消息并不多。 状态是200或304,我可以在开发人员工具中看到网络上的对象,所以它在那里,但我无法在成功函数中访问该对象。

这是ajax调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type:"get",
    dataType:"json",
    jsonp:"false",
    url:"http://my.api.url:8080/quote",                                                                                          
    success: function(r){
        var q = r;
        $("#quote").append(q);
},
    error: function(xhr, status, error) {
        console.log(xhr);
    }
});

JSON:

1
{"msg":[{"quote":"quote goes here"}]}

JSON是由带有response.json()的快速/节点应用程序生成的,如果影响了这些东西,我对它们来说相对较新。 我尝试使用contentType:'application / json;将jsonp设置为false。 charset = utf-8',超过数据类型json,以及其他无效尝试。 任何帮助/批评都表示赞赏。


所以这里的问题实际上是CORS,跨源资源共享,因为jQuery从不同的端口调用API,CORS按照安全标准阻止了生成的JSON数据。 对node.js app添加一个简单的中间件,调整用于处理CORS的头文件解决了这个问题。

1
2
3
4
5
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin","*");
    res.header("Access-Control-Allow-Headers","Origin, X-Requested-With,Content-Type, Accept");
    next();
});

所以json基本上在浏览器中,但由于标题而无法访问任何脚本。 这些页面在其他人遇到此问题时帮助很大。

启用CorsMozilla Dev