Windows phone 8 xmlHttpRequest到WP8中的绝对url

Windows phone 8 xmlHttpRequest到WP8中的绝对url,windows-phone-8,xmlhttprequest,Windows Phone 8,Xmlhttprequest,在WindowsPhone8中测试应用程序时,我偶然发现了一个奇怪的问题。我正在使用xmlHttpRequest(不能使用ajax,因为我需要作为bufferarray发送)调用第三方url。这在Android和iOS中非常有效,但在WP8中会抛出一个错误 例如: 这将导致: log:"before request" log:"1" log:"2" log:"Error in error callback: Cameraxxxxx = InvalidStateError" 但是,如果我

在WindowsPhone8中测试应用程序时,我偶然发现了一个奇怪的问题。我正在使用xmlHttpRequest(不能使用ajax,因为我需要作为bufferarray发送)调用第三方url。这在Android和iOS中非常有效,但在WP8中会抛出一个错误 例如:

这将导致:

 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
这会直接发送,但由于找不到url,因此会获得404状态。我显然没有在我的请求中使用谷歌,但错误是相同的。如果使用“http://”,则会出现错误,但如果没有,则不会出现错误,但无法找到url

任何想法都值得赞赏


我发现了一件事,但不确定是否相关。根据W3C html 5文档,如果文档未完全处于活动状态(当它是其浏览上下文的活动文档时),则在open()上显示InvalidStateError。如果这是错误的原因;文档怎么可能不是活动文档,以及如何定义不在url上的应用程序的基本url(文档建议将base设置为文档的文档基本url(或设置来源/参考源))


离我们更近了一步。在做了大量的修改之后,我最终发现出于某种原因,WP8上的is需要在应用任何其他内容之前打开xhr。因此,将xhr.timeout移到xhr.open下面是可行的


这在我的特殊情况下引发了另一个问题。。但这可能是另一个话题

解决方法是将timout移动到开口下方。。因此:

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);

我相信,如果你删除http,它会假定它是你网站中的一个页面,但找不到它的相同来源。谢谢Liam,是的,我确信这就是正在发生的事情。更重要的是,我需要访问一个外部url,而且以前从未被限制在其他设备上。谢谢你,缪斯,也许你是对的。。但是有什么办法可以解决这个问题吗?这是一个有趣的发现。我想知道这是否是规范的一部分。
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);