2012-03-21 14 views
0

PhoneGap/jQueryを使用してアプリケーションを作成していて、リモートサーバーからJSONデータを取得しています。私はjQueryのを使用する、2つ(おおよそ)同等の「getJSON」機能を作った標準のJavaScriptを使用して1、そして他ました:jQuery AJAXは、最初のリクエスト後にタイムアウトを要求します。

getJSON = function(url, callback) { 
    var request = new XMLHttpRequest(); 
    request.open("GET", url, false); 
    request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 

    request.onreadystatechange = function() { 
     if (request.readyState != 4) { 
      return; 
     } 

     if (request.status == 200) { 
      callback(JSON.parse(request.responseText)); 
     } else { 
      alert("Error: " + request.status); 
     } 
    } 
    request.send(null); 
}; 

標準の機能、私がしたすべてのケースで正常に動作するように見える(おそらく無粋でも)試しました。ただし、jQueryバージョン:

jqGetJSON = function(url, callback) { 
    $.ajax(url, { 
     cache: false, 
     success: callback, 
     error: function(jqxhr, message) { 
      alert("AJAX error: " + message + ". Please retry."); 
     } 
    }); 
}; 

...一度しか動作しないようです。 2回目の呼び出しは決して戻らない

getJSON("http://example.com/blah/json", function(data) { 
    alert(JSON.stringify(data)); 
}); // this works multiple times 

jqGetJSON("http://example.com/blah/json", function(data) { 
    alert(JSON.stringify(data); 
}); // this succeeds 

jqGetJSON("http://example.com/blah/json", function(data) { 
    alert(JSON.stringify(data); 
}); // this times out 

、およびjQueryのオプションに「タイムアウト」パラメータを追加すると、一貫誤差関数に別の要求が行われるたびに呼び出されます:私は両方のようにのように呼ばれます。私が見つけたどんな種類のコンソール出力もありません。他のURLへのさまざまなjQueryリクエストも機能します(たとえば、「検索」と「情報の取得」リクエストを別々にするなど)。ただし、もう一度やり直すだけで問題は解決します。

私はここで何かが分からないことを確信しています。多分もっとよく知っている人が、それが何であるかについていくつかの洞察を提供できるでしょうか?

ありがとうございます!

(私はjQueryの1.7.1でのPhoneGap 1.5を使用して、とAndroid 2.3.7を実行しているデバイス上でテストしています)

答えて

1

私はjQueryの1.6を使用して、PhoneGapの1.5(つまり、Apacheのコルドバ1.5)と、これと同じ問題がありました.4。私はPhoneGap 1.4.1にロールバックするための別のユーザーの提案に従って、私の問題を解決しました。私の場合、getJSON(または.ajax、1つの特定の呼び出しがリクエストを実行したかどうかは関係ありませんでした) - その1つの呼び出しが失敗した後(常にタイムアウトになります)、その後の呼び出しはすべて失敗していました。明らかに何らかのPhoneGapの問題。 JARファイルとJavascriptファイルを置き換えるだけでなく、1.4.1にロールバックするときには、プラグイン名をplugin.xmlの古いcom.phonegap。*の名前に戻して変更し、cordova.xmlの名前を変更することを忘れないでくださいphonegap.xmlに(そしてコードブロックのブロック名を変更する)。

幸運を祈る!

関連する問題