我在Windows Phone 8中测试应用时遇到了一个奇怪的问题。我正在使用xmlHttpRequest(不能使用ajax,因为我需要发送为bufferarray)来拨打第三方网址。这在Android和iOS中完美运行,但在WP8中引发错误 例如:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (){
if(xhr.readyState == 4){
if(xhr.status==200){
alert(xhr.responseText);
}else{
console.log("Error: "+xhr.responseText);
}
}
}
console.log("1");
xhr.timeout = 30000;
console.log("2");
xhr.open("POST","http://google.com",true);
console.log("3");
xhr.setRequestHeader("Content-Type",contentType+"; boundary=" + boundary);
console.log("4");
//other headers / auth etc
console.log("about to post");
xhr.send(bodyBuf);
这将导致:
log:"before request"
log:"1"
log:"2"
log:"Error in error callback: Cameraxxxxx = InvalidStateError"
但是,如果我改开:
xhr.open("POST","google.com",true); //or www.google.com etc
这是直接发送,但随后找到404状态,因为找不到网址。我显然没有在我的请求中使用谷歌,但错误是一样的。使用“http://”时出现错误,但没有,它没有错误但无法找到网址。
任何想法都赞赏。
我找到了一件事,但不确定它是否相关。根据W3C html 5文档,如果文档未完全活动(当它是其浏览上下文的活动文档时),则会在open()上显示InvalidStateError。如果这是错误的原因;如何将文档不是活动文档以及如何定义不驻留在URL上的应用程序的基本URL(文档建议将基础设置为文档的文档基本URL(或设置源源/引用源))?
离得更近了一步。经过大量的调整,我最终发现由于某种原因,WP8需要在应用其他任何东西之前打开xhr。所以将xhr.timeout移动到xhr.open以下的工作。
这在我的特定案例中提出了另一个问题..但这可能是另一个话题。
答案 0 :(得分:2)
解决方案是将超时移至open .. shop>以下
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (){
if(xhr.readyState == 4){
if(xhr.status==200){
alert(xhr.responseText);
}else{
console.log("Error: "+xhr.responseText);
}
}
}
xhr.open("POST","http://google.com",true);
xhr.timeout = 30000;
xhr.setRequestHeader("Content-Type",contentType+"; boundary=" + boundary);
//other headers / auth etc
xhr.send(bodyBuf);