2013-09-25 18 views
5

मैं कुछ मौजूदा कोड पर काम कर रहा हूं।

$.ajax({ 
     type: "get", 
     url: url , 
     dataType: "jsonp", 
     cache: "false", 
     jsonpCallback: "onJSONPLoad", 
     success: function(json){ 
       alert('hi!'); 
       //perform operation 
     }, 
     error: function() { 
      alert('Error occurs!'); 
     } 
}); 

अब जब मैं वैध url गुजर रहा हूँ यह ठीक काम करता है: मैं निम्नलिखित कोड है। लेकिन जब मैं अवैध url पास कर रहा हूं तो इसे एक त्रुटि चेतावनी के माध्यम से होना चाहिए। लेकिन लिपि किसी भी त्रुटि चेतावनी फेंक नहीं है। असल में मैं url पैरामीटर को मान्य करना चाहता हूं या यह असफल रहा है? कृपया मेरे कोड में त्रुटि को खोजने में मेरी सहायता करें या मुझे प्राप्त करने के लिए और तरीका सुझाएं। मैं निम्नलिखित लिंक लेकिन मेरी समस्या का समाधान करने में सक्षम नहीं जाँच की है:

jQuery Ajax error handling, show custom exception messages
jQuery ajax error function, Ajax Success and Error function failure

अद्यतन: मैं jQuery कंसोल लॉग लॉग इन करने के नीचे दिए गए कोड को शामिल किया है।

@Override 
      public boolean onConsoleMessage(ConsoleMessage cm) { 
       Log.d("web chrome client", cm.message() + " -- From line " 
       + cm.lineNumber() + " of " 
       + cm.sourceId()); 
       return true; 
      } 

निम्न त्रुटि की पहचान की: XMLHttpRequest cannot load file:///android_asset/xxxx/new_source.json?callback=onJSONPLoad. Origin null is not allowed by Access-Control-Allow-Origin. -- From line 1 of null

निम्नलिखित कोड जोड़ना, एप्लिकेशन को सफलतापूर्वक चल रहा है।

if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { 
    webView.getSettings().setAllowUniversalAccessFromFileURLs(true); 
} 

तो, मूल रूप से यह हो रहा है क्योंकि यूआरएल jquery द्वारा उपलब्ध नहीं है।
मेरी मदद करने के लिए हर शरीर धन्यवाद।

+0

हो और कंसोल से पेस्ट त्रुटि .. –

+0

आपका उत्तर यहाँ है: [प्रथम] [1] और यहाँ: [द्वितीय] [2] [1]: http://stackoverflow.com/questions/377644/jquery-ajax-error-handling-show-custom-exception-messages [2]: http://stackoverflow.com/questions/3642348/jquery-ajax-error-callback – AminAmiriDarban

+0

मेरा उत्तर देखें .. –

उत्तर

14

JSON करने के लिए इस्तेमाल इस

1) इस बदलें: डेटाप्रकार: क्रॉस-डोमेन अनुरोध के लिए jsonp, अनुरोध का मतलब है कि विभिन्न डोमेन और

डेटा टाइप: जेसन उसी डोमेन के लिए एक ही मूल अनुरोध के लिए। डेटाप्रकार: "json"

2) आप याद कर रहे हैं ',' के बाद सफलता समारोह

$.ajax({ 
     type: "get", 
     url: url , 
     dataType: "json", 
     cache: "false", 
     jsonpCallback: "onJSONPLoad", 
     success: function(json){ 
       alert('hi!'); 
       //perform operation 
     }, 
     error: function() { 
      alert('Error occurs!'); 
     } 
}); 

3) इस

error: function(jqXHR, exception) { 
      if (jqXHR.status === 0) { 
       alert('Not connect.\n Verify Network.'); 
      } else if (jqXHR.status == 404) { 
       alert('Requested page not found. [404]'); 
      } else if (jqXHR.status == 500) { 
       alert('Internal Server Error [500].'); 
      } else if (exception === 'parsererror') { 
       alert('Requested JSON parse failed.'); 
      } else if (exception === 'timeout') { 
       alert('Time out error.'); 
      } else if (exception === 'abort') { 
       alert('Ajax request aborted.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 

4) इस jQuery.ajax

जाँच की कोशिश

जेसन प्रकार जावा के रूप में प्राप्त डेटा फ़ाइल को पार करता है स्क्रिप्ट ऑब्जेक्ट और निर्मित ऑब्जेक्ट को परिणाम डेटा के रूप में देता है। ऐसा करने के लिए, जब ब्राउज़र इसका समर्थन करता है तो यह jQuery.parseJSON() का उपयोग करता है; अन्यथा यह एक फंक्शन कन्स्ट्रक्टर का उपयोग करता है। विकृत JSON डेटा एक पार्स त्रुटि फेंक देगा (अधिक जानकारी के लिए json.org देखें)। JSON डेटा संरचित डेटा को इस तरह से संचारित करने के लिए सुविधाजनक है जो जावास्क्रिप्ट को पार्स करने के लिए संक्षिप्त और आसान है। यदि रिमोट सर्वर पर प्राप्त डेटा फ़ाइल मौजूद है, तो इसके बजाय jsonp प्रकार निर्दिष्ट करें।

jsonp प्रकार कॉलबैक = के क्वेरी स्ट्रिंग पैरामीटर को जोड़ता है? यूआरएल के लिए।सर्वर को JSON डेटा को वैध JSONP प्रतिक्रिया बनाने के लिए कॉलबैक नाम से प्रीपेड करना चाहिए। हम jsonp विकल्प के साथ $ .ajax() पर कॉलबैक के अलावा पैरामीटर नाम निर्दिष्ट कर सकते हैं।

नोट: जेएसओएनपी जेएसओएन प्रारूप का विस्तार है, जिसके लिए क्वेरी स्ट्रिंग पैरामीटर का पता लगाने और संभालने के लिए कुछ सर्वर-साइड कोड की आवश्यकता होती है। इसके बारे में अधिक जानकारी मूल पोस्ट में इसके उपयोग की जानकारी दे सकती है।

जब दूरस्थ सर्वर से डेटा पुनर्प्राप्त किया जाता है (जो केवल स्क्रिप्ट या जेएसएसपी डेटा प्रकारों का उपयोग कर संभव है), त्रुटि कॉलबैक और वैश्विक घटनाओं को कभी नहीं निकाल दिया जाएगा।

लेकिन आप तो कोड सक्रिय होने की आवश्यकता:

var req = $.ajax({ 
    url : url, 
    dataType : "jsonp", 
    timeout : 10000 
}); 

req.success(function() { 
    console.log('Yes! Success!'); 
}); 

req.error(function() { 
    console.log('Oh noes!'); 
}); 
+0

धन्यवाद, 'डेटा टाइप: "jsonp" की कोशिश करने के लिए ठीक है। समस्या यह है कि त्रुटि ब्लॉक काम नहीं कर रहा है। – Yup

+0

यदि मैं 'डेटा टाइप:" जेसन "का उपयोग करता हूं, त्रुटि ब्लॉक काम करता है। लेकिन वैध यूआरएल succes फ़ंक्शन के लिए डेटा रिटर्न फॉर्म के रूप में काम नहीं कर रहा है यूआरएल 'jsonp' का डेटा टाइप है। – Yup

+0

कोई अपडेट काम नहीं कर रहा है। – Yup

1

आप सफलता समारोह के बाद अल्पविराम याद कर रहे हैं और डेटा टाइप बदल

$.ajax({ 
     type: "get", 
     url: url , 
     dataType: "json", 
     cache: "false", 
     jsonpCallback: "onJSONPLoad", 
     success: function(json){ 
       alert('hi!'); 
       //perform operation 
     }, 
     error: function() { 
      alert('Error occurs!'); 
     } 
}); 
+0

आपके उत्तर के लिए धन्यवाद, अल्पविराम वहां है। – Yup

0

इस के साथ प्रयास करें।

 $.ajax({ 
       type: "get", 
       url: url , 
       dataType: "jsonp", 
       cache: "false", 
       jsonpCallback: "onJSONPLoad", 
       success: function(result){ 
         alert('hi!'); 
         //perform operation 
       },  
       error: function(req, status, err) { 
       console.log('something went wrong', status, err); 
       alert('something went wrong'+ status + err); 
       } 
     }); 

यह भी पढ़ें। http://api.jquery.com/jQuery.getJSON/#entry-examples

और कोशिश $.getJSON() बजाय $.ajax()

+0

मुझे त्रुटि पर चेतावनी संदेश चाहिए। – Yup

+0

कृपया अभी जांचें –

1

की एक बग हाल ही में क्रोम 52 (अगस्त 2016) में पेश भी इस तरह का व्यवहार हो सकता है। उम्मीद है कि यह लंबे समय तक नहीं टिकेगा।

https://bugs.chromium.org/p/chromium/issues/detail?id=633696

यह सख्ती प्रारंभिक समस्या से संबंधित है नहीं, क्योंकि यह चलाता है GET अनुरोध के लिए ही onSuccess हैंडलर से शुरू कर दिया, लेकिन मैं इसे अन्य लोगों ने इस समस्या पर मदद की खोज कर सकते के लिए उल्लेख किया है।

संबंधित मुद्दे