AJAX XML无法在带有Web-Works或Phonegap的BlackBerry上运行

时间:2012-05-29 13:08:21

标签: ajax jquery blackberry cordova blackberry-webworks

我构建了一个从Web上的外部xml文件加载统计信息的应用程序。

它在网络浏览器中运行良好。当我使用PhoneGap for Android打包它时,它也可以正常工作。 也适用于BlackBerry Playbook。

但是,当我将其打包为BlackBerry时,它不起作用。我已经尝试过WebWorks命令行工具和PhoneGap。


当我使用WebWorks打包并在模拟器上运行时

Web Inspector上的控制台给出了错误

无法加载资源:服务器响应状态为500(请求资源时出错。)

当我使用Phonegap打包并在模拟器上运行时

当我使用PhoneGap而不是WebWorks打包时,我会在警报中弹出以下错误...

gap : ["Network Status", "getConnectionInfo","Network Status0",true]

gap: ["Device","getDeviceInfo","Device1",true]

gap_init:

gap_callbackServer:

gap_poll:

Live version of App(未编译)

ZIP file to run in WebWorks or Phonegap


similar unanswered question


Youtube Video of Problem in BlackBerry Simulator


我尝试过的事情

我已添加到配置文件中。

<access subdomains="false" uri="*"/>

我添加了$ .support.cors函数suggested by phonegap

$( document ).bind( "mobileinit", function() {
    // Make your jQuery Mobile framework configuration changes here!
    $.mobile.allowCrossDomainPages = true;
});

3 个答案:

答案 0 :(得分:8)

您的模拟器和WebWorks SDK是最新的吗?

我已经在2.0.1.358的现场PlayBook和2.0.0.7971的模拟器上进行了测试,没有遇到任何问题。

我使用2.2.0.15 WebWorks for PlayBook SDK打包,我唯一改变的是config.xml中的id,包装器中没有接受带点的。


好的,现在我明白了问题所在。

这是相当模糊的,但Java智能手机SIM卡设置为与另一个称为MDS模拟器的旧模拟器工具一起使用。对于大多数事情来说,这并不是必需的,但提供类似于设备在企业BES环境中看到的网络。模拟器认为即使MDS模拟器没有运行,它也始终具有所谓的“MDS”连接。

使用WebWorks应用程序,如果使用没有<rim:connection>标记的默认config.xml文件(对于大多数情况来说完全没问题),它会在TCP选项之前优先​​考虑MDS。这是一个问题,因为sim认为它实际上没有MDS连接,并且连接尝试最终失败。

如果将以下位代码添加到config.xml中,它将降低MDS的优先级,并使其正常工作。

<rim:connection timeout="60000">
    <id>BIS-B</id>
    <id>TCP_WIFI</id>
    <id>TCP_CELLULAR</id>
    <id>MDS</id>
    <id>WAP2</id>
    <id>WAP</id>
</rim:connection>

最后一个关键项目 - 你需要设置模拟器才能使用模拟的wifi网络。单击主屏幕的顶部横幅(通过无线指示灯),然后打开Wifi,并在选项和状态中单击Wi-Fi网络。然后单击默认WLAN网络并完成相关步骤。

答案 1 :(得分:1)

我认为这与webworks.js末尾附近的设置调用有关。我不知道你在哪里有这个图书馆,但它似乎有点旧。

WebWorks应自动公开您在配置文件中请求的javascript API(即:window.blackberry.*),而无需像http://localhost:8472/blackberry/extensions/get那样提出请求。

由于您只是进行ajax调用,我将放弃所有这些并专注于调试您的ajax代码。

PS:Phonegap在WebWorks上运行,因此进一步抽象不太可能解决您的问题。

答案 2 :(得分:0)

它看起来像跨源资源共享问题。您可能必须使用CORS

在服务器端启用它:http://enable-cors.org/

在您的javascript中,使用此来请求远程内容:

// Create the XHR object.
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
    // XHR for Chrome/Safari/Firefox.
    xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
} else {
    // CORS not supported.
    xhr = null;
}
return xhr;
}

// Make the actual CORS request.
function makeCorsRequest() {

var url = "http://www.example.com/";

var xhr = createCORSRequest('GET', url);

if (!xhr) {
    alert('CORS not supported');
    return;
}

// Response handlers.
xhr.onload = function() {
    var text = xhr.responseText;
    // Do something with returned text data
};

xhr.onerror = function() {
    alert('Woops, there was an error making the request.');
};

xhr.send();
}

来自:http://supportforums.blackberry.com/t5/Web-and-WebWorks-Development/AJAX-from-external-website-not-working/m-p/1736733#M24128