1

私は一日中この問題と戦おうとしていて、いたるところでグーグルで検索しました。解決策が記載されたページが見つからないだけかもしれませんが、次のような問題と解決策を見てきました。

phonegap での Ajax 呼び出しが要求を送信しない

JQuery mobile + Phonegap : Ajax 呼び出しが Android Emulator で機能しない

そこにある解決策のどちらも私の問題を解決していないようです。

私がやりたいことは、リモート サーバーに AJAX 呼び出しを発行し、いくつかのパラメーターをアップロードして、いくつかのコンテンツをダウンロードすることだけです。このスクリプトはブラウザで完全に機能しますが、Phonegap 内のファイルへの小さな変更に応じて、「タイムアウト」エラーがスローされるか、単に「エラー」と表示されます。コードは次のとおりです (AJAX エンドポイントは dev エンドポイントです。試してみることができるようにそのままにしておきます)。

<html>
<head>
<script type="text/javascript" charset="utf-8" src="jquery-1.10.2.min.js"></script>
</head>

<body>
<ul>
<div id="app-status-ul">
<li>Loaded</li>
</div>
</ul>
</body>
<script>
var serverRegHit = function(data, httpStat){
    $("#app-status-ul").append('<li>Server Reg OK, HTTP status: '+httpStat+'</li>');
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>');
};
var serverRegFail = function(data, httpStat){
    $("#app-status-ul").append('<li>Server Reg FAIL, HTTP status: '+httpStat+'</li>');
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>');
};
      $.ajax({url:"http://keb.bz/gcm/?deviceid=12345",
              jsonp: 'callback',
              dataType: 'jsonp',
              timeout: 25000,
              success: serverRegHit,
              error: serverRegFail});

</script>
</html>

私は cordova 2.9 を使用してみましたが、2.5 にダウングレードしましたが、これも役に立たないようです。

私の config.xml は .* と keb.bz ドメインをホワイトリストに登録しており、マニフェストでアプリにインターネットへのアクセスを許可するパーミッションがあり、GCM デバイス ID を正常に取得できるため、これが機能すると思います。

JSON、JSONp、TEXT、および AJAX を介してさまざまな dataType を使用してみましたが、どれも違いはありませんでした。

Cordova/PhoneGap に不足している別の構成ポイントはありますか?

ここで何か助けていただければ幸いです。

4

2 に答える 2

3

manifest.xmlを再確認させてくれた@xioawlに感謝します。そこで権限を正しく構成していなかったことがわかりました。

最後に、Cordova 2.5、jQuery 1.10 を使用して (jQuery Mobile は使用しませんでした)、次のアクセス パスで res/config.xml を設定しました。

<access origin="http://127.0.0.1*" />
<access origin="http://keb.bz" subdomains="true" />
<access origin=".*" />  <!-- only during development -->

すべての JavaScript ライブラリを含めた後に、このスニペットを配置します。

<script>
$(document).bind("mobileinit", function(){
   $.mobile.allowCrossDomainPages = true;
});
</script>

そして、次の manifest.xml アクセス許可を使用します。

<uses-permission android:name="android.permissions.INTERNET" />
<uses-permission android:name="android.permissions.NETWORK_ACCESS" />
<uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />

私の JSONp クエリは引き続き次のようになります。

$.ajax({url:"http://keb.bz/gcm/?deviceid=12345",
        jsonp: 'callback',
        dataType: 'jsonp',
        timeout: 25000,
        success: serverRegHit,
        error: serverRegFail});

これが誰かに役立つことを願っています!

于 2013-10-13T06:53:20.307 に答える