【问题标题】:How can we call AJAX in Firefox我们如何在 Firefox 中调用 AJAX
【发布时间】:2012-08-19 17:56:45
【问题描述】:

我正在使用 XMLHttpRequest 进行 AJAX 调用。

它在 IE7 中运行良好,但是当我在 Firefox 中尝试相同时,我无法通过 response.write 找回它

我正在使用以下功能:

<script type="text/javascript">

        function ddSelect_Change() {
          var xmlhttp;
            if (window.XMLHttpRequest) { // Mozilla, Safari, ...       
                xmlhttp = new XMLHttpRequest();
            }
            else if (window.ActiveXObject) { // IE       
                try {
                    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }

                catch (e) 
                {
                    try 
                    {
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e) 
                    {
                    }
                }
            }   

 xmlhttp.onreadystatechange = function () {
                //alert(xmlhttp.responseText);
                if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
}
}
 var url = "http://" + location.hostname + "Locationurl?Method=methodname";
xmlhttp.open("POST", url);
               xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            xmlhttp.send(); 
}

添加

我有两个独立的 Web 应用程序,一个是 tridion Web 应用程序,另一个是自定义 Web 应用程序。我正在从 tridion Web 应用程序到自定义 Web 应用程序进行交互。两个 url 都有不同的域。并且状态我在 Firefox 中得到 0,而对于 readystate,我在警报中没有得到 (3)。

【问题讨论】:

  • AJAX 代码的其余部分是什么样的?
  • @ChristoferEliasson 我正在使用上面的其余代码。
  • 你有任何 JS 错误吗?如果您使用 fiddler 记录您的 HTTP 流量,是否对服务器进行了调用?
  • 您可能需要确保在调用 .send() 之前定义了 onreadystatechange 函数(您上面的解释并不清楚您是否这样做)。

标签: c# javascript ajax


【解决方案1】:

您是否考虑过使用像 jQuery 这样的库?它已经为您解决了这些问题。

如果您正在开发 SDL Tridion GUI 扩展,请查看 PowerTools 项目以获取大量示例。 (http://code.google.com/p/tridion-2011-power-tools/)

【讨论】:

    【解决方案2】:

    到目前为止,您显示的代码应该可以在 Firefox 中运行。 Firefox 支持 XHR。

    这可能会有所帮助:https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

    更新:

    onreadystatechange 在 AJAX 调用期间被多次触发,因此您可能希望将回调扩展为如下内容:

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState === 4) {
          if (xmlhttp.status === 200) {
            alert(xmlhttp.responseText);
          } else {
            alert('There was a problem with the request.');
          }
        }
      }
    

    xmlhttp.readyState === 4 验证请求是否已完成,因此您不会在实际获得响应之前尝试提醒响应。 xmlhttp.status === 200 验证您是否从服务器收到了 200 OK,以确保没有服务器端错误或 URL 不正确。

    【讨论】:

    • 谢谢,我使用了你建议的相同代码,但我仍然无法在 Firefox 中运行
    • @SDLBeginner 您在 Firefox 中遇到任何错误吗? AJAX 调用是如何触发的?会不会是触发调用的代码在 Firefox 中不起作用?如果您只是这样做会发生什么:xmlhttp.onreadystatechange = function () { alert(xmlhttp.readyState); } 那么您是否收到任何警报?
    • 不,当我只保留xmlhttp.onreadystatechange = function () { alert(xmlhttp.readyState); } 时,我得到 1 作为第一个警报,4 作为第二个警报。我保留了我编辑的代码。
    • @SDLBeginner 好的,所以我们知道调用至少被触发了。如果您将其扩展到xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4) { alert(xmlhttp.status); }},那么您会收到200 作为您的警报吗?
    • @SDLBeginner 在这种情况下,由于您实际上想要进行跨域请求,因此您必须查看CORSJSON-P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多