【问题标题】:jQuery .ajax() call to host equal to current page failingjQuery .ajax() 调用主机等于当前页面失败
【发布时间】:2013-12-20 18:34:39
【问题描述】:

我正在使用 JavaScript(使用 Jquery)构建后端系统的接口。

系统将界面本身“托管”为网页,以及通过 $.ajax 调用与之通信的 api。

当我打开http://localhost:4242 的接口时,将api 主机($.ajax 调用的url 值)设置为http://localhost:4242/api 并尝试$.ajax 调用,它会超时。

这似乎是因为两个地址是相等的,因为如果我将它们中的任何一个更改为本地ip地址或主机名,或者从html文件中打开界面,请求都会按预期工作。

这是 $.ajax 函数的限制,还是其他原因?

编辑:更多信息!

  • 后端永远不会收到请求
  • ajax 请求确实出现在网络控制台中(挂起,超时后取消)
  • $.ajax({error: function(jqXHR,textStatus,errorThrown){ //stuff }}) 在达到超时值后触发 textStatus 和 errorThrown both == 'timeout'

好的.. 如果我将类型从 POST 更改为 GET,它会突然发挥作用。哇?

我认为“jsonp”数据类型可能必须如此,因为它用于跨域通信,但如果域相等则更改为“json”没有效果。

【问题讨论】:

  • 只要协议、域和端口匹配,根本不成问题。尝试只使用 URL /api 看看是否有效。
  • 超时是什么意思?您收到 TimeOut 错误或请求未返回任何内容?如果你没有得到任何结果,可能是因为 URL 响应缓存在浏览器上
  • 我添加了更多信息:最值得注意的是,如果类型是“GET”而不是“POST”,则请求成功。

标签: jquery ajax


【解决方案1】:

$.ajax 没有这样的限制,否则这个世界上的生活将是不切实际的:)

如果您确定请求正在发送(检查 Chrome 或 Firebug 中的“网络”选项卡!)并且确实超时,那么可以肯定,这很可能是您的后端问题,但这听起来很奇怪。 “当我从 html 文件打开界面时”是什么意思?

【讨论】:

  • 后端开发人员告诉我数据从未收到;它是根据网络选项卡发送的。该界面是一个网页,可以通过 file:///path/server.html 或localhost:4242 或其他主机打开。
  • 我假设 server.html 不是真正的 html 页面,并且 .html 是请求 html 响应?无论如何,问题可能是服务器没有正确响应 Ajax 调用(它应该具有 XMLHttpRequest 标头)......如果没有更多信息,很难判断。我只能说 $.ajax 没有直接的错!
  • .html是一个实际的html页面,它提供了与/api通信的接口,返回一个json对象。
【解决方案2】:

我们现在已经解决了这个问题。事实证明,如果使用dataType: 'jsonp' 而不是跨域请求,则需要将 crossDomain 选项设置为 true。这几乎是合乎逻辑的。

为什么它可以与 type: 'GET' 正常工作仍然是个谜。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多