使用 Phonegap for BlackBerry 从服务器获取 JSON 数据

Posted

技术标签:

【中文标题】使用 Phonegap for BlackBerry 从服务器获取 JSON 数据【英文标题】:Getting JSON data from server with Phonegap for BlackBerry 【发布时间】:2013-05-23 20:24:50 【问题描述】:

我正在使用 phonegap 开发一个 BlackBerry 应用程序。问题是,它没有从我的服务器在真实设备上获取外部 JSON,尽管它在 Ripple 上运行良好。

首先,我在 build.xml 文件中添加了<access subdomains="true" uri="*" />

这是我的 html/javascript 代码:

<script>
function onLoad() 
   $.ajax(
      type : 'GET',
      url : "http://myserver.com/api/test.php",
      jsonpCallback : 'jsonCallback',
      crossDomain : true,
      cache : false,
      dataType : "jsonp",
      jsonp: 'callback',
      success: function(json) 
         $( ".info" ).html("success");
      ,
      error: function(xhr, textStatus, errorThrown) 
         $( ".info" ).html("Error: " + textStatus + ":" + errorThrown);
      
);

</script>
<body onload="onLoad();">
...
</body>

当我在 Ripple 模拟器上运行它时,会调用成功回调,但在真实设备 (BlackBerry 7.0) 上我会得到以下输出:

parsererror: json 回调未被调用。

附带说明,我已经在 J​​SONLint 中验证了响应,没关系。此外,响应是有效的 jsonp 响应:

jsonCallback("result":"status":"ok","testText":"There goes my content");

此外,我将代码放在我的服务器上以记录访问,但它没有被调用,所以我猜问题不是我的服务器代码,而是某处的移动代码。

【问题讨论】:

阅读此groups.google.com/forum/?fromgroups#!topic/phonegap/BVHbPTYIgag 可能会有所帮助 【参考方案1】:

您不需要使用 jsonp 调用,而是最好进行普通的 json 调用。 在你的服务器端抛出一些像这样的 php 头文件:

  <?php
  header('Access-Control-Allow-Origin: *');
  header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
  header('Access-Control-Max-Age: 1000');
  header('Access-Control-Allow-Headers: Content-Type');
  ?>

您将能够使用所有 jQuery AJAX 回调。

【讨论】:

但是,我没有其他 http 来源。请记住:这是一个黑莓应用程序。这不是一个网站。 我刚刚更新了答案,使用通配符可以让您从移动应用程序访问。请试一试。【参考方案2】:

你试过不使用jsonp吗?

 $.ajax(
      type : 'GET',
      url : "http://myserver.com/api/test.php",
      dataType : "text",
      success: function(jsonText) 
         var json = $.parseJSON(jsonText);
         $( ".info" ).html("success");
      ,
      error: function(xhr, textStatus, errorThrown) 
         $( ".info" ).html("Error: " + textStatus + ":" + errorThrown);
      

为了以防万一,在尝试之前确保您的设备可以访问互联网!

编辑

您是否尝试过@GEMI 评论中的解释?

要从您的网站访问外部网站,您需要将域名添加到应用的白名单中。这是在 config.xml 文件中完成的:

<access subdomains="true" uri="http://my.domain.com" /> 

此外,如果您使用的是 PhoneGap API 或 BlackBerry WebWorks API,您需要在域下添加适当的功能:

<feature id="phonegap" required="true" version="0.9.3" /> 

【讨论】:

还是不行。它现在显示:“请求资源时出错”。 但是请求是否到达了服务器?在服务器端将header('Access-Control-Allow-Origin: *'); 添加到您的Response 应该可以从任何来源进行访问,这样您就不会出错。您的代码是否到达了 ajax 请求上的 SuccessError 回调? 没有。我添加了 header('Access-Control-Allow-Origin: *');但它甚至没有到达服务器。我还能错过什么? 您 100% 确定您的设备可以访问互联网?那至少应该到达服务器。如果你在不同的设备上尝试,同样的事情会发生吗?【参考方案3】:

我遇到了同样的问题...我通过将预期的 contentType 设置为我的 ajax 调用来解决它。

contentType: "application/json; charset=utf-8"

skrip最后是这个样子的。

$.ajax(
  type: "GET",
  url: "http://myUrl.com/jsonFile.json.js",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(data)  // Response function
    //work with your data
  ,
  error : function () 
     //Handle your errors
  
);

我请求的文件只是一个带有 json 内容的 js 文件,例如:["id":"1","name":"lol"...]

希望这可以帮助某人:)

【讨论】:

以上是关于使用 Phonegap for BlackBerry 从服务器获取 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Phonegap for BlackBerry 从服务器获取 JSON 数据

PhoneGap 上的 OneSignal for iOS 不注册设备

使用 Phonegap for Ios 实现 Urban Airship 在注册时卡住了

通过 phonegap 和 cordova for Android 播放音频

CanvasCamera for iOS PhoneGap / Cordova

ZXing phonegap 插件的 XCode 构建错误:Undefind symbols for architecture i386