在 chrome 和 firefox 中响应为空

Posted

技术标签:

【中文标题】在 chrome 和 firefox 中响应为空【英文标题】:response is null in chrome and 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天。 让我知道是否有任何错误。

提前谢谢....

【问题讨论】:

【参考方案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");

以上是关于在 chrome 和 firefox 中响应为空的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 54 没有从我的网站获得 HTTPS 响应; Chrome 53、Chromium、Firefox 和 Safari 都可以

jquery $.ajax 在 Chrome 或 Firefox 中调用会导致 401 未经授权的响应,但在 IE 中有效

Firefox 开发者工具截断长网络响应,Chrome 不显示

为啥条件块中的函数声明在 Chrome 而不是 Firefox 中提升到函数范围?

为啥我对表格的媒体查询可以在 chrome 中使用,而不是在 firefox 中使用?

[转]Google Chrome/IE/FireFox查看HTTP请求头request header响应头