【问题标题】:Ajax success function not working with returned json data and status 200/304Ajax 成功函数不适用于返回的 json 数据和状态 200/304
【发布时间】:2018-06-22 12:19:47
【问题描述】:

我正在做一个 AJAX 调用,它返回一个 JSON 对象,并且成功地是浏览器中的 JSON。然而,成功函数并没有被触发,而是错误块被击中,消息只说“错误”,这没什么好继续的。状态是 200 或 304,我可以在开发者工具中看到网络上的对象,所以它在那里,但我无法在成功函数中访问该对象。

这里是ajax调用:

$.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:

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

JSON 是由带有 response.json() 的 express/node 应用程序生成的,如果有影响的话,我对这些东西比较陌生。我尝试使用 contentType: 'application/json; 将 jsonp 设置为 false; charset=utf-8',超过数据类型 json,以及其他无效尝试。感谢任何帮助/批评。

【问题讨论】:

  • 你也可以试试complete 吗?与成功相同的功能。只有当你有一个 http-header 200 时才会触发成功。
  • @zer02 不,我没试过。我会试一试,谢谢。
  • @zer02 很遗憾没有得到它。
  • 你试过了吗:response.json({success : "works!", status : 200});
  • 是的,JSON 正在从服务器传递到浏览器。这是在这里失败的ajax调用。我可以在 url 和开发者工具中查看 JSON 响应。

标签: javascript json node.js ajax


【解决方案1】:

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

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 本质上是在浏览器中,但由于标题,任何脚本都无法访问。如果其他人遇到此问题,这些页面会很有帮助。

Enable Cors
Mozilla Dev

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多