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

时间:2013-05-28 18:50:06

标签: blackberry jsonp cordova

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

首先,我已将<access subdomains="true" uri="*" />添加到build.xml文件中。

这是我的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回调。

作为旁注,我已经在JSONLint中验证了响应,这没关系。此外,响应是一个有效的jsonp响应:

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

此外,我将代码放在我的服务器上以进行日志访问,并且它没有被调用,所以我猜问题不是我的服务器代码,而是在移动代码的某个地方。

3 个答案:

答案 0 :(得分: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回调。

答案 1 :(得分:0)

您是否尝试过不使用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" /> 

答案 2 :(得分:0)

我遇到了同样的问题......我通过将预期的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”} ...]

希望这有助于某人:)