【问题标题】:$.ajax call working fine in IE8 and Doesn't work in firefox and chrome browsers$.ajax 调用在 IE8 中运行良好,但在 firefox 和 chrome 浏览器中不起作用
【发布时间】:2012-01-02 08:10:22
【问题描述】:

这是我的代码

$.ajax(
{
    type: "GET", 
    url: 'http://devserver:7995/stdpart/services/GetAllPartsWithFilter',
    dataType: 'json',
    data: jsonPartsData,
    success: fnGetPartsData, 
    error: PartsLoadError  
});

这是代码在 IE8 中运行良好,但在 Firefox 和 Chrome 浏览器中运行失败。当我检查 XHR 对象时,它表示状态代码为 0。我检查了所有其他问题,但没有一个问题能帮助我识别问题。

如果我在这段代码中做错了什么,请告诉我。如果 $.ajax 有一些兼容性问题,那么请提出与之等效的建议。

更新: 我们在以下位置找到了一种解决方案 http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html

它使用了动态脚本的概念。我们在我们的应用程序中做了同样的事情,然后每件事现在似乎都在工作。还是要全面分析。

【问题讨论】:

  • 您确定要返回有效的 JSON 吗?我遇到过 IE 评估格式错误的 JSON(如 { "key" : "value", })的情况,而其他浏览器会失败(应该如此)。有任何错误信息吗?
  • 错误是什么,jsonPartsData是什么???
  • 实际上你不能对外部站点进行 Ajax 调用,除非你有特定的设置。
  • @FelixKling 你可以...只使用 JSONP ...
  • @Andreas:对,我想说这属于特殊设置;)看起来 OP 没有使用 JSONP,所以唯一的其他方法是设置 Access-Control-Allow-Origin 标头。

标签: ajax jquery xmlhttprequest


【解决方案1】:

这是因为Same origin policy。您不能使用 ajax 调用外部站点。如果你真的要使用,你必须使用JSONP。或者您可以为此使用服务器端代理。意思是,在服务器端调用外部站点并对那个 web 服务进行 ajax 调用。


更新:

在您的网站中创建 webserviceice,并在 webmethod 中输入以下代码

string proxyURL = "http://devserver:7995/stdpart/services/GetAllPartsWithFilter";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(proxyURL);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

if (response.StatusCode.ToString().ToLower() == "ok")
{
    Stream content = response.GetResponseStream();
    StreamReader contentReader = new StreamReader(content);         
    return contentReader.ReadToEnd();
}
return string.Empty;

然后使用您的代码访问本地服务。

for more information please refer this link

【讨论】:

  • 或使用Access-Control-Allow-Origin 标头(但并非所有浏览器都支持)。
  • 能否分享一些示例代码,如果有的话。我尝试了几个例子,但对我没有任何帮助:(
  • 如果您想使用JSONP,您还必须更改服务器代码。最简单的方法是为此使用服务器端代理。尝试此链接以获取更多详细信息如何使用服务器端代理,请参阅更新的答案
  • @Dinesh:这个样本适合你吗?还是我需要更新更多?
  • @Sandamal:我们正在按照您的建议尝试包装服务。
【解决方案2】:

另一种解决方案是使用jQuery ajaxTransport extension,该jQuery ajaxTransport extension 将 XDomainRequest 用于 IE8+。

【讨论】:

    【解决方案3】:

    我确实认为您的代码有问题。

    请看Pure JavaScript Ajax calls

    不同的库以不同的方式实现 Ajax API。因此,在您的情况下,您使用的 jquery 版本一定有问题。

    请尝试 Pure JavaScript Ajax 调用,看看它是否适用于所有浏览器。如果是这样,那么您不想花时间在 jquery 上存在问题。如果没有,那么你错过了一些东西。

    【讨论】:

    • 使用纯 JavaScript,我也遇到了同样的问题。我通过添加 Access-Control-Allow-Origin 和其他一些参数来自定义标题。没有任何效果:(
    • 你能确认纯 JS Ajax 可以在 IE 中工作,而不是在 chrome/ff/safari 中吗?
    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多