2

phonegap を使用して BlackBerry アプリケーションに取り組んでいます。問題は、Ripple では問題なく動作しますが、実際のデバイスではサーバーから外部 JSON を取得できないことです。

<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) では次の出力が得られます。

パーサー エラー: json コールバックが呼び出されませんでした。

補足として、JSONLint で応答を検証しましたが、問題ありません。また、応答は有効な jsonp 応答です。

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

さらに、アクセスをログに記録するコードをサーバーに配置しましたが、呼び出されていないため、問題はサーバーコードではなく、モバイルコードのどこかにあると思います。

4

3 に答える 3

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 コールバックを使用できます。

于 2013-06-05T17:30:00.293 に答える
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" /> 
于 2013-06-05T22:40:29.303 に答える
0

私は同じ問題を抱えていました...予想されるcontentTypeをajax呼び出しに設定することで解決しました。

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

スクリップは最終的にこのようになります。

$.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
  }
});

私が要求したファイルは、[{"id":"1","name":"lol"}...] のような json コンテンツを含む js ファイルのみです。

これが誰かを助けることを願っています:)

于 2013-11-07T08:24:44.743 に答える