2013-01-25 8 views
6

हमें एंड्रॉइड 4.0, 4.1 और 4.2 (हमारे पास परीक्षण करने के लिए कुछ भी कम नहीं मिला है) में निर्मित ब्राउज़र के साथ समस्या हो रही है। समस्या यह है कि AJAX कॉल पहले लोड पर पूरी तरह से काम करेगा, आप जितनी बार चाहें उतना बार रन अजाक्स बटन दबा सकते हैं और यह ठीक होगा। आप इंटरनेट से डिस्कनेक्ट कर सकते हैं और यह ठीक से काम करेगा। लेकिन अगर आप बाहर निकलें (पूरी तरह से, सुनिश्चित करें कि यह सिर्फ पृष्ठभूमि में नहीं चल रहा है) ब्राउज़र फिर इसे फिर से लॉन्च करता है, यह लोड और बटन प्रेस पर असफल हो जाएगा। इससे कोई फर्क नहीं पड़ता कि आप ऑनलाइन हैं या ऑफलाइन हैं। AJAX कॉल से लौटाई गई त्रुटि स्थिति = 0 और readyState = 0.
के साथ "त्रुटि" है जब यह सफल होता है तो आपको एक संदेश वापस मिलता है "स्थिति = 200 के साथ" अजाक्स कॉल से राहत "और एक readyState = 4.jQuery अजाक्स के साथ एंड्रॉइड ब्राउज़र समस्या और जब एपकेच का उपयोग किया जाता है

कोड एंड्रॉइड क्रोम, फ़ायरफ़ॉक्स और ओपेरा पर परीक्षण किए गए हर दूसरे ब्राउज़र पर काम करता है। आईओएस 5 और 6 पर यह काम करता है और हम जो भी डेस्कटॉप ब्राउजर पा सकते हैं। क्या ऐसा कुछ है जो मुझे याद आ रहा है या हमने निर्मित ब्राउज़र में एक बग पाया है। इस पर कोई मदद की सराहना की जाएगी विशेष रूप से अगर यह सिर्फ कुछ बेवकूफ है।

हमने एक परीक्षण स्क्रिप्ट बनाई है जो इस समस्या को अच्छी तरह से प्रदर्शित करती है, मैंने इसे इस संदेश के निचले हिस्से से जोड़ा है।

धन्यवाद

टिम

test.php

<?php  
function displayPage() { 
?> 
<!DOCTYPE html> 
<html manifest="test.manifest" debug="true"> 
    <head> 
     <meta name="viewport" content="width=device-width, initial-scale=1" > 
     <title>test</title> 
     <script type="text/javascript" src="jquery-1.9.0.min.js"></script> 
     <script type="text/javascript"> 
      function runAjaxGet() { 
       var XMLHttpRequest = $.ajax({ 
        url: "test.php", 
        dataType: "json", 
        data: "test=test", 
        traditional: "true", 
        success: function(responseData) { 
         alert('good\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status); 
         console.log(XMLHttpRequest); 
        }, 
        error: function (xhr, ajaxOptions, thrownError, responseData) { 
         alert('bad\n responseData: '+responseData+ '\n res:' + XMLHttpRequest.responseText +'\n readyState: '+ XMLHttpRequest.readyState + '\n Status: '+XMLHttpRequest.status); 
         console.log(XMLHttpRequest); 
        } 
       }); 
      } 
      $(document).ready(function() { 
       runAjaxGet(); 
      }); 

     </script> 
    </head> 
    <body> 
     <button Name="Run Ajax" onclick="runAjaxGet();">Run Ajax</button> 
    </body> 
</html> 
<?php 
} 

function processRequests() { 
    header("Content-Type: application/json; charset=UTF-8"); 
    echo (json_encode("respose from Ajax Call")); 
} 

date_default_timezone_set ("UTC"); 

if (isset($_REQUEST['test'])) { 
    $which = $_REQUEST['test']; 
} else { 
    $which = ''; 
} 

switch ($which) { 
    case "test": 
     processRequests(); 
     break; 

    default : 
     displayPage(); 
     break; 
} 
?> 

test.manifest

CACHE MANIFEST 
test.php 
jquery-1.9.0.min.js 
test.php?test=test 

उत्तर

0

बस तारांकन नेटवर्क खंड जोड़ने और इसे काम करेंगे

CACHE MANIFEST 
test.php 
jquery-1.9.0.min.js 
test.php?test=test 
NETWORK: 
* 
0

मैंने इसी समस्या को मारा और यह निर्धारित किया कि कैश से पुनर्प्राप्त होने पर 0 सफलता को इंगित करता है। ऐसा संभव है क्योंकि अनुरोध पूरी तरह से स्थानीय रूप से हल होने के बाद से कोई वास्तविक http अनुरोध शामिल नहीं है।

AppCache मैनिफ़ेस्ट फ़ाइल:

CACHE MANIFEST 

CACHE: 
/config 

जावास्क्रिप्ट:

var request = new XMLHttpRequest(); 
request.open('GET', '/config', false); // async=false is ok because this file will always come from AppCache 
request.send(null); 

// Older versions of android return 0 when ajax request retrieved from appcache 
if (request.status == 200 || request.status == 0) { 
    return JSON.parse(request.responseText); 
} else { 
    console.log("ERROR: config not retrievable"); 
    throw "Attempt to retrieve config return http status " + request.status; 
} 
संबंधित मुद्दे