XmlHttpRequest状态= 0在远程服务器上,状态200在本地主机上

问题描述:

我有两个几乎相同的PHP代理脚本,我通过几乎相同的JS调用。第一种在所有情况下都能正常工作。XmlHttpRequest状态= 0在远程服务器上,状态200在本地主机上

第二个代码(在下面的代码中)在Firefox和Chrome中的本地主机IIS服务器上工作。在远程 Glassfish Apache服务器上,它在Firefox中运行,但在Chrome中返回status = 0并返回空(在v22 & v26中进行了测试)。两个PHP代理脚本实际上是相同的,下载相似的长度数据(在1到4 MB之间)。使用下面的JS,其他和错误警报都会被触发。

var dateQueryText = interviewDays[exitDay]; 
xmlhttp=new XMLHttpRequest(); 
xmlhttp.onreadystatechange = function(){ 
    if (xmlhttp.readyState == 4){ 
     if (xmlhttp.status == 200){ 
      var xmlDoc=xmlhttp.responseXML; 
      processGPX(xmlDoc); 
     } 
     else{alert("Download of GPS data failed for date " + dateQueryText + " Status: " + xmlhttp.status);} 
    } 
} 
xmlhttp.onerror = function (e){alert("Error encountered and download of GPS data failed for date " + dateQueryText + " Status: " + xmlhttp.status);}; 

xmlhttp.open("POST","proxy2.php",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
params = ("case=" + caseID + "&gps=true" + "&date=" + dateQueryText); 
xmlhttp.send(params); 

我已经尝试了以下无济于事:

  • async & synchronous下载
  • 重写return类型,因为GPX(XML格式的GPS数据)并不总是理解服务器{xmlhttp.overrideMimeType("text/xml");}
  • 提供完整路径PHP脚本

什么能在Chrome中导致的吗?

编辑:这是失败的PHP请求的请求标头。没有收到任何回应。

Request URL: https://www.XXX.edu/AAA/BBB/CCC/proxy2.php 

Request Headers 
Cache-Control:no-cache 
Content-type:application/x-www-form-urlencoded 
Origin:https://www.XXX.edu 
Pragma:no-cache 
Referer:https://www.XXX.edu/AAA/BBB/CCC/exitgraphic.php?case=TESTCASE&instrument=0001&mode=TEST 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Ubuntu/12.10 Chromium/22.0.1229.94 Chrome/22.0.1229.94 Safari/537.4 

Form Data 
case:TESTCASE 
inst:0001 
mode:TEST 
gps:true 
date:02222013 

你能重新尝试Chrome的开发者工具(工具 - >开发者工具)失败的请求激活并张贴在这里请求和响应(在网络选项卡)的标题和任何错误信息在Console选项卡中?

+0

上面添加了请求标头。没有收到答复。与上述JS一样,我无法弄清楚实际的错误是什么,因为xmlhttp.onerror中的e对象是XMLHttpRequestProgressEvent类型。 – g16 2013-04-30 18:00:14

+0

当我切换到同步模式,我得到“NETWORK_ERR:XMLHttpRequest异常101”堆栈:“错误:同步请求中发生网络错误 – g16 2013-04-30 18:01:51

+0

这是一个跨域请求吗?如果是这样,您可能需要添加对[ CORS](http://www.w3.org/TR/cors/)到您的服务器 – 2013-04-30 18:53:10