为什么可以';我是否使用Intel XDK应用程序将Android设备连接到本地主机?

为什么可以';我是否使用Intel XDK应用程序将Android设备连接到本地主机?,android,intel-xdk,Android,Intel Xdk,我是应用程序开发的新手。我正在使用Intel XDK制作一个Android应用程序 该应用程序通过使用Symfony连接到后端数据库来工作,并且在模拟器中表现良好。我现在想从一台真正的设备上进行测试,使用我的PC作为本地主机,通过WiFi。我了解到您必须使用ipconfig检索本地主机IP地址,然后将该IP用于连接。但是,当我测试应用程序时,它没有连接。奇怪的是,如果我使用具有相同URL的移动浏览器,连接就会起作用:我可以看到用于获取数据库信息的XML文件 应用程序中连接的代码: xmlhttp

我是应用程序开发的新手。我正在使用Intel XDK制作一个Android应用程序

该应用程序通过使用Symfony连接到后端数据库来工作,并且在模拟器中表现良好。我现在想从一台真正的设备上进行测试,使用我的PC作为本地主机,通过WiFi。我了解到您必须使用ipconfig检索本地主机IP地址,然后将该IP用于连接。但是,当我测试应用程序时,它没有连接。奇怪的是,如果我使用具有相同URL的移动浏览器,连接就会起作用:我可以看到用于获取数据库信息的XML文件

应用程序中连接的代码:

xmlhttp=new XMLHttpRequest();            
xmlhttp.onerror=transferFailed;
xmlhttp.open("GET","http://192.xxx.x.x/symfony/web/app_dev.php/api/v1/reportes/reportes.xml",false);
onerror功能:

function transferFailed(e) {
  alert("Error al conectar:"+e.target.status);
}
正如我所说,连接不起作用,我收到警告消息:“Error al conectar:0”

如果我把地址
http://192.xxx.x.x/symfony/web/app_dev.php/api/v1/reportes/reportes.xml
在移动浏览器中,我得到了正确的XML文件

编辑:看来问题出在Synchronus的请求上。后来我不得不解析响应xml。我不知道为什么在模拟器和我不久前在phonegap中制作的一个应用程序中,它在没有解析的情况下工作。守则:

function mapIni() {


        xmlhttp=new XMLHttpRequest();            
        xmlhttp.onerror=transferFailed;
        xmlhttp.open("GET","http://localhost/symfony/web//app_dev.php/api/v1/reportes/reporte.xml",true);

        xmlhttp.onload= function (event) {
        alert("onload:"+xmlhttp.response);
        };

        xmlhttp.onreadystatechange = function() {

        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {


             xmlDoc=xmlhttp.responseXML; 
             xmlDoc=xmlhttp.responseXML; 
             xmlDoc = new DOMParser().parseFromString(xmlhttp.responseText,'text/xml');

             x=xmlDoc.getElementsByTagName("entry");


            alert("x[0]:"+x[0].getElementsByTagName("tipo")[0].childNodes[0].nodeValue);
        }
      }
      xmlhttp.send();
}   

它可能由于跨源请求而失败,请添加此脚本标记:
我可以看到两个可能的问题。如果您希望javascript运行时的其余部分在网络请求执行时响应,那么同步使用XHR通常是一个问题。
我将首先尝试异步请求(无论如何,这确实应该是首选):

您可能必须在打开请求后发送请求(对于非GET请求,这当然是正确的,但可能在未发送的情况下获取工作,但我对此表示怀疑)

最后,假设您在onload事件上附加了一些处理程序,以便在这对您有效时使用:)


此外,当模拟器位于同一台机器上并识别localhost时,实际的Android设备无法解释localhost在哪里。对于设备生成,将localhost更改为服务器名称,在windows下更改首次安装windows时分配的计算机名称,并通过浏览器进行测试,确保可以通过计算机名称访问文件。验证后,将localhost更改为您的计算机名。您还必须确保允许并启用CORS。

当我添加该脚本时,警报消息不会显示,但也不起作用,数据也不会加载:/还可以尝试在xhr.jsI这样做之前添加
,但同样的事情发生了Hanks!。问题似乎是同步请求,但现在我有另一个问题。我可以在移动设备中看到带有警报的xml内容,但出于同样的原因,getElementsByTagName()方法无法工作。我更新了帖子以显示代码。问题解决了,我只需要解析xml响应。我不知道为什么在模拟器中它不用解析就可以工作,我不久前做的phonegap应用程序也是如此。谢谢:)啊,很好。是的,我经常忘记这一部分(或者用JSON.parse解析JSON响应)。很高兴你找到了。我无法解释为什么它能在模拟器中工作,尽管可能是因为模拟器拦截了XHR,所以它能智能地解析响应,但我对此表示怀疑。
xmlhttp.open("GET","...",true);
xmlhttp=new XMLHttpRequest();            
xmlhttp.onerror=transferFailed;
xmlhttp.open("GET","...",true);
xmlhttp.send();
xmlhttp.addEventListener('onload', function (event) {
  console.log(xmlhttp.response);
});