【问题标题】:response is null in chrome and firefox在 chrome 和 firefox 中响应为空
【发布时间】:2012-11-09 09:40:54
【问题描述】:

我想使用 javascript 调用休息服务。我的代码是:

function CreateXMLHttpRequest() {
   if (typeof XMLHttpRequest != "undefined") {
      alert("1");
      return new XMLHttpRequest();
   }
   else if (typeof ActiveXObject != "undefined") {
      alert("2");
      return new ActiveXObject("Microsoft.XMLHTTP");
   }
   else {
      throw new Error("XMLHttpRequestnot supported");
   }
}

function CallWebService() {
   var objXMLHttpRequest = null;
   objXMLHttpRequest = CreateXMLHttpRequest();

   objXMLHttpRequest.open("POST", "http://localhost:2546/abc.svc/json/GetXml", true);
   objXMLHttpRequest.setRequestHeader("Content-Type", "application/xml;charset=UTF-16");
   var packet = '<CompanyRequest xmlns="http://schemas.datacontract.org/2004/07/abc.DomainModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><CompanyName>company</CompanyName></CompanyRequest>';

   objXMLHttpRequest.send(packet);
      alert(packet);
      var d =(objXMLHttpRequest.responseText);
      alert(d);           
   }

它在 IE 中运行良好,但在 Firefox 和 chrome 中响应为空。我不明白出了什么问题。我一直在寻找这个3天。 让我知道是否有任何错误。

提前谢谢....

【问题讨论】:

    标签: javascript xml wcf-rest


    【解决方案1】:

    您正在进行异步调用。尝试使用回调。

    function CreateXMLHttpRequest() {
         if (typeof XMLHttpRequest != "undefined") {
             return new XMLHttpRequest();
         } else if (typeof ActiveXObject != "undefined") {
             return new ActiveXObject("Microsoft.XMLHTTP");
         } else {
             throw new Error("XMLHttpRequestnot supported");
         }
     }
     function CallWebService() {
         var objXMLHttpRequest = CreateXMLHttpRequest();
         objXMLHttpRequest.open("POST", "http://localhost:2546/abc.svc/json/GetXml", true);
         objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml");
         var packet = '<CompanyRequest xmlns="http://schemas.datacontract.org/2004/07/abc.DomainModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><CompanyName>company</CompanyName></CompanyRequest>';
         objXMLHttpRequest.onreadystatechange = function (){
             if (objXMLHttpRequest.readyState==4 && objXMLHttpRequest.status==200) {
                 alert(objXMLHttpRequest.responseText);
             }
         }
         objXMLHttpRequest.send(packet);
     }
    

    【讨论】:

    • 你得到的错误是什么?你在服务器端获取xml吗?
    • 没有显示错误?只是空警报框...它在 IE 中工作,但在 chrome 和 firefox 中不工作
    • 尝试将 Content-Type 设置为“text/xml”。在 CallWebservice 函数中查看修改后的代码。
    • 我无法理解原因。你可以通过 sathishp123@gmail.com 联系我
    • 我回复了你的身份证。检查一下。
    【解决方案2】:

    您正在执行异步请求。

    尝试做一个同步请求,比如

     objXMLHttpRequest.open("POST", "http://localhost:2546/abc.svc/json/GetXml", false);
    

    或异步

    objXMLHttpRequest.onreadystatechange = function () {
        if ( objXMLHttpRequest.readyState == 4 ) {
            alert(req.responseText);
        }
    };
    

    并将标题设置为:

    试试这个:

     objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml");
    
     objXMLHttpRequest.setRequestHeader( "SOAPAction", "http://localhost:2546/abc.svc/json/GetXml" );
    

    【讨论】:

    • 这行得通。但在响应到来之前,它会冻结 UI 执行任何其他操作。
    • @Vidhya:对不起。刚写了一个原始代码。我总是为 XMLHttpRequest 使用变量名“req”。已更新。
    • 没有显示错误?只是空警报框...它在 IE 中工作,但在 chrome 和 firefox 中不工作
    • 你试过同步吗?使用我的第一个选项进行测试。如果警告框仍然是空的,那么您可能需要检查您的服务器端代码。
    • 试试这个:objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml"); objXMLHttpRequest.setRequestHeader("SOAPAction", "localhost:2546/abc.svc/json/GetXml");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多