Windows phone 7 WP7 emulator内的PhoneGap应用程序中没有internet连接

Windows phone 7 WP7 emulator内的PhoneGap应用程序中没有internet连接,windows-phone-7,cordova,Windows Phone 7,Cordova,我正在开发一个PhoneGap应用程序,并在Windows Phone上进行测试。我正在使用jQuery,包括从网站抓取数据的AJAX操作。这在桌面浏览器(包括IE9)和WindowsPhone8设备上运行良好 然而,当我尝试在WP7模拟器中运行我的应用程序时,AJAX请求不断导致错误:“没有建立Internet会话”。我检查了是否可以加载iframe,但它也不起作用。基于此,我猜我的应用程序没有任何互联网连接。更令人困惑的是:window.navigator.onLine在启动时是正确的 仿真

我正在开发一个PhoneGap应用程序,并在Windows Phone上进行测试。我正在使用jQuery,包括从网站抓取数据的AJAX操作。这在桌面浏览器(包括IE9)和WindowsPhone8设备上运行良好

然而,当我尝试在WP7模拟器中运行我的应用程序时,AJAX请求不断导致错误:“没有建立Internet会话”。我检查了是否可以加载iframe,但它也不起作用。基于此,我猜我的应用程序没有任何互联网连接。更令人困惑的是:
window.navigator.onLine
在启动时是正确的

仿真器本身具有internet连接;我可以毫无问题地使用内置浏览器


这一问题的原因可能是什么;i、 e.我可以采取哪些进一步的调试步骤?

我认为这是我遇到的一些问题,请尝试以下方法:

首先,我发现在使用jQuery+Windows Phone+PhoneGap时

在调用AJAX函数之前,您必须等待事件“deviceready”触发并添加2行代码:

document.addEventListener('deviceready', function () {
    jQuery.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
    Examplerequest(); //Your request
}, false);
要访问项目文件,需要发出AJAX请求 函数Examplerequest() {

}


url–不能是相对的!//在WP8中,但在WP7中,它必须是相对的(或者其他方式,不记得)。

我在启动时通过检查Microsoft.Phone.Net.NetworkInformation.DeviceNetworkInformation.IsNetworkAvailable检查了应用程序的网络连接,结果返回false。在泥土中挖了几下后,我终于发现了问题:

在我的
WMAppManifest
文件中,除
ID\u CAP\u WEBBROWSERCOMPONENT
之外的所有功能都已禁用。暂时启用所有这些解决了我的问题(此问题的相关问题可能是
ID\u CAP\u NETWORKING

为什么它在Windows Phone 8上工作?


我的猜测是,在WP8设备上运行WP7应用程序时,会自动检测到所需的功能,这很奇怪,因为WP8 SDK中已删除了对功能的自动检测。但是,我找不到任何文档来澄清问题。

我没有使用jQuery mobile,我的代码中已经有CORS行。此外,相对路径也不是问题,因为我正在从另一个域获取数据。等待
deviceready
事件可能会有所帮助,我会在开始编码后立即检查…只是尝试了一下:虽然在WP8中,
deviceread
事件没有在WP7上触发…另一个更新:它在
$(文档)之后触发。准备好了
,但等待两者都没有帮助。好的,让我们尝试另一件事。你能写一份请求书吗?我建议您在C#中创建一个简单的测试项目来发出WebRequest,并检查Emulator/WebService中是否存在问题,您是否可以提供您的请求
Var url = "www/templates/about/example.tpl";

$.ajax({
    url: url, //path to resource
    error: function (jqXHR, textStatus, errorThrown) { 
        //function on error
        alert(url + " Error: " + errorThrown);
    },
    dataType: options.externalTemplateDataType
}).done(function () { 
    //function when request is done
});