【问题标题】:jQuery.ajax call works on IE, but fails on FirefoxjQuery.ajax 调用适用于 IE,但在 Firefox 上失败
【发布时间】:2013-09-09 05:08:56
【问题描述】:

我正在从 JavaScript 调用 SOAP WebService。在 IE 中,我的代码可以工作,但在 Firefox 上,使用 textStatus = "error"、xhr.status = 0 和 errorThrown 调用错误函数。我尝试了不同的答案,在 SO 上找到,但无法解决问题。

    jQuery.support.cors = true;
    jQuery.ajax({
        url: serviceUrl,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("SOAPAction", soapAction);
        },
        type: "POST",
        dataType: "xml",
        data: soap,
        success: function(data, textStatus, jqXHR ) {
            // report success
            success.style.display='block';
        },
        error: function (jqXHR, textStatus, errorThrown) {
            // report error
            fail.style.display='block';
            alert(textStatus + ": " + jqXHR.status + " / " + errorThrown);
        },
        contentType: "text/xml; charset=utf-8"
    });

浏览器版本:IE 9、Firefox 23.0.1

【问题讨论】:

  • 是否有任何错误记录到 Firefox 的开发者控制台?
  • 我检查了 Web 开发人员错误控制台,没有错误...

标签: jquery firefox


【解决方案1】:

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

【讨论】:

  • 我尝试使用 dataType: "JSONP",但它失败了 textStatus = "parsererror", xhr.status = 200 and errorThrown = "Error: jQuery17208070102435807937_1378381185457 was not called"
  • 通过使用完整事件然后检查状态值解决了解析器错误。例如:完成:function (xhr, status) { if (status === 'error' || !xhr.responseText) { handleError(); } 其他 { var 数据 = xhr.responseText; //... } }试试这个
  • 对不起,我好像没听懂,你能再详细点吗?
猜你喜欢
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多