【问题标题】:success callback never get invoked for a JSONP request永远不会为 JSONP 请求调用成功回调
【发布时间】:2023-03-08 07:18:01
【问题描述】:

我有这个网址:https://cdn.static.wizzair.com/en-GB/TimeTableAjax?departureIATA=BUD&arrivalIATA=TLV&year=2016&month=6

返回一个json。如果我使用浏览器访问此 URL,或者如果我使用浏览器 (DHC) 上的 REST 客户端发出请求,它就可以工作!现在,对于通过 https 运行的快速服务器来说,我正在尝试使用 jQuery 使这个请求正常工作,但没有运气。

尽管我在网络调试中看到请求很好并且看到了 json 响应,但错误回调总是被执行!

我的代码:

/// removed old code ///

$.ajax({
                method: 'GET',
                url: "https://cdn.static.wizzair.com/en-GB/TimeTableAjax?departureIATA=BUD&arrivalIATA=TLV&year=2016&month=6&callback=?",
                dataType: "jsonp",
                success: function() { console.log("success"); },
                error: function(err) { ;console.log(err); }
            });

** * 编辑 * **

所以我知道这不起作用,因为目标不支持 jsonp。

将其更改为正常的 GET 请求将得到一个错误,并且此消息:

XMLHttpRequest 无法加载 https://cdn.static.wizzair.com/en-GB/TimeTableAjax?departureIATA=BUD&arrivalIATA=TLV&year=2016&month=6。 “Access-Control-Allow-Origin”标头的值“https://wizzair.com”不等于提供的原点。 Origin 'https://localhost:3000' 因此不允许访问。

这是预期的。但是这怎么能在我的浏览器和本地休息客户端上工作呢?我做错了什么?

谢谢!

【问题讨论】:

  • crossDomain: true, 对 (a) JSONP 请求或 (b) 首先没有指向相同来源的请求没有影响。
  • 因为他们不返回JSONP...你不能通过添加它来让网站返回JSONP,他们需要支持它。
  • contentType: 'application/json', — 您正在发出 GET 请求,因此没有请求正文来描述其内容类型。
  • 能否请您检查一下错误信息,大概是怎么回事的答案就在那里?
  • 使用error: function(err) { console.log(err); },它会提示你出了什么问题。

标签: javascript jquery ajax rest cross-domain


【解决方案1】:

您请求的 URL 返回 JSON,而不是 JSONP。

JSONP 请求仅在服务器设计为使用 JSONP 格式的响应对其进行响应时才有效。

如需进一步阅读,请参阅What is JSONP all about


关于问题的重大修改:请参阅this duplicate。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2013-12-07
    • 2018-11-12
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多