2012-03-21 140 views
0

我正在使用從遠程服務器獲取JSON數據的PhoneGap/jQuery編寫應用程序。我做了兩(約)相當於「的getJSON」功能,使用一個標準的JavaScript,另一個用的jQuery:第一次請求後,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."); 
     } 
    }); 
}; 

...似乎只工作一次。我打電話都像這樣:

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請求也可以工作(例如單獨的「搜索」和「獲取信息」請求),但是隻會再次發生一次,重新啓動應用程序可以解決問題。

我敢肯定,我在這裏錯過了一些明顯的東西,也許有人更熟悉可以提供一些有關它是什麼的見解?

在此先感謝!

(我用的PhoneGap 1.5使用jQuery 1.7.1,並運行Android 2.3.7測試設備)

回答

1

我有同樣的問題與PhoneGap的1.5(即Apache Cordova的1.5),使用jQuery 1.6 0.4。我遵循另一位用戶的建議回滾到PhoneGap 1.4.1,併爲我解決了這個問題。在我的情況下,這是一個特殊的調用getJSON(或.ajax,無論我執行請求的方式) - 在一個失敗的調用(總是超時)之後,每個後續調用都失敗。顯然是某種PhoneGap問題。除了替換JAR文件和Javascript文件,在回滾到1.4.1時,不要忘記將插件名稱更改回plugin.xml中舊的com.phonegap。*名稱並重命名cordova.xml到phonegap.xml(並更改cordova塊名稱)。

祝你好運!