【问题标题】:AJAX XML not working on BlackBerry with Web-Works or PhonegapAJAX XML 不适用于带有 Web-Works 或 Phonegap 的 BlackBerry
【发布时间】:2012-05-29 13:08:20
【问题描述】:

我已经构建了一个应用程序,它从网络上的外部 xml 文件加载统计信息。

它在网络浏览器中运行良好。当我将它与 Android 的 PhoneGap 打包时,它也可以正常工作。 也适用于 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;
});

【问题讨论】:

  • 在模拟器上运行时,您在 webinspector 控制台中收到什么消息?查看您的实时版本,对您的 webworks.js 标头脚本的引用导致 404...虽然我不确定您在其中运行了什么。
  • 在我打包 webworks.js 的版本中,我已将其添加到 live 版本中。 Web Inspect 给我“加载资源失败:服务器响应状态为 500(请求资源时出错。)”

标签: ajax jquery blackberry cordova blackberry-webworks


【解决方案1】:

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

我已经在 2.0.1.358 的实时 PlayBook 和 2.0.0.7971 的模拟器中进行了测试,没有发现任何问题。

我使用 2.2.0.15 WebWorks for PlayBook SDK 打包,我唯一更改的是 config.xml 中的 id,它在带有点的打包程序中不被接受。


好的,现在我知道问题出在哪里了。

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

对于 WebWorks 应用程序,如果您使用没有 &lt;rim:connection&gt; 标记的默认 config.xml 文件(这在大多数情况下完全没问题),它会将 MDS 优先于 TCP 选项。这是一个问题,因为 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 网络。然后点击 Default WLAN Network 并按照步骤进行关联。

【讨论】:

  • 在 Playbook 上运行良好,问题是让它在 BB 6 和 7 上运行。
  • 好的,在 9810 上的 7.1.0 上对其进行了测试,它仍然可以正常工作。你在什么操作系统上测试?
  • 这是我在 7.1 上使用 9810 进行测试的视频,但它不起作用youtu.be/_XkTZOQ-ugY 请发布视频,以便我可以看到您的不同之处。
  • 啊,这表明问题出在哪里。我会将其添加为完整答案,以便我有空间。
【解决方案2】:

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

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

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

PS:Phonegap 工作在 WebWorks 之上,因此进一步抽象事物不太可能解决您的问题。

【讨论】:

  • 我的意思是如果你不使用它,你应该完全摆脱它,我假设你没有......因为即使资产 404'd,我仍然可以使用你的现场版本。
  • 哦,我以为你需要在你的应用程序中包含 webworks.js 才能将它与 WebWorks 打包?
【解决方案3】:

看起来像是跨域资源共享问题。您可能必须使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多