2011-06-02 8 views
6

अद्यतन 1:jQuery के माध्यम से हो रही है JSONP

यह है कि मैं क्या ब्राउज़र में मिलता है अगर मैं

http://www.remote_host.com/feed.php?callback=jsonpCallBack

{ 
    "rss": { 
     "channels": [ 
      { 
       "title": "title goes here", 
       "link": "http://www.remote_server.com/feed.php", 
       "description": "description goes here", 
       "items": [ 
        { 
         "title": "item title goes here", 
         "link": "item link goes here", 
         "pubDate": "item date goes here", 
         "description": "item description goes here" 
        }, 
        { 
         "title": "item title goes here", 
         "link": "item link goes here", 
         "pubDate": "item date goes here", 
         "description": "item description goes here" 
        }, 
        { 
         "title": "item title goes here", 
         "link": "item link goes here", 
         "pubDate": "item date goes here", 
         "description": "item description goes here" 
        } 
       ] 
      } 
     ] 
    } 
} 

तो यह jsonp नहीं है टाइप है?

मूल प्रश्न:

मेरे पास निम्न स्क्रिप्ट जहाँ मैं एक दूरस्थ होस्ट से json डेटा प्राप्त करने की कोशिश कर रहा हूँ:

$(document).ready(function() { 
    get_json_feed(); 

    function get_json_feed() { 
     $.ajax({ 
      url: 'http://www.remote_host.com/feed.php?type=json', 
      type: 'GET', 
      dataType: 'jsonp', 
      error: function(xhr, status, error) { 
       alert("error"); 
      }, 
      success: function(json) { 
       alert("success"); 
      } 
     }); 
    } 
}); 

लेकिन किसी कारण से मैं एक त्रुटि और चेतावनी हो रही है:

Warning: Resource interpreted as Script but transferred with MIME type text/html.

Error: Uncaught SyntaxError: Unexpected token :

मैं क्या गलत कर रहा हूं?

+1

यू प्रकार परिवर्तित करने का प्रयास किया था ?? – diEcho

+0

@diEcho, किस प्रकार का? मेरे पास क्लाइंटसाइड प्रकार और डेटा टाइप पर 2 प्रकार हैं, और मेरे पास सर्वरसाइड पर एक प्रकार है। – oshirowanen

+1

ऐसा लगता है जैसे सर्वर JSONP वापस नहीं करता है। आपको (ए) 'feed.php? Type = jsonp' और (b) सर्वर को JSONP का समर्थन करने का प्रयास करना चाहिए, यह आमतौर पर एक पैरामीटर स्वीकार करता है जिसके साथ आप कॉलबैक नाम निर्दिष्ट करते हैं, जैसे: feed.php? Type = jsonp और callback = ? '। आपको जिस सेवा का उपयोग कर रहे हैं उसके दस्तावेज को पढ़ना होगा। –

उत्तर

7

JSONP "प्रोटोकॉल" साइट प्रपत्र की एक जावास्क्रिप्ट बयान के साथ अपने अनुरोध का जवाब दे रहे पर निर्भर करता है,

someFunction(someJSON) 

समारोह के नाम पर विचार किया जा रहा है के साथ अपने कोड से एक तर्क के रूप आपूर्ति की जाती है, कि प्रतिक्रिया स्क्रिप्ट, जिसे ब्राउज़र द्वारा उपभोग और व्याख्या करने के बाद, उस कार्य को जेएसओएन — के एक पार्स किए गए ब्लॉब के साथ कॉल किया जाएगा, जो एक जावास्क्रिप्ट ऑब्जेक्ट कहने के लिए है। JQuery लाइब्रेरी आपके लिए कुछ बुकिपींग काम करेगी, यहां तक ​​कि वैश्विक स्तर पर स्कॉप्ड फ़ंक्शन को कॉल करने की सीमा तक भी (जो कोड होगा जो आपको "सफलता" तर्क के रूप में कॉलबैक को कॉल करता है)।

इस प्रकार, आपको यह जांचना चाहिए कि उस सर्वर से वास्तविक प्रतिक्रिया कैसा दिखता है। यह मुझे लगता है जैसे कि यह उस सर्वर का जवाब देने के लिए तैयार सर्वर नहीं हो सकता है। आप को यह सुनिश्चित करने की ज़रूरत है कि आपके URL पर "कॉलबैक =?" फ़ॉर्म का अतिरिक्त पैरामीटर है।

+0

कृपया पुष्टि करने के लिए अपडेट 1 देखें। – oshirowanen

+0

दाएं - यह सिर्फ सादा JSON है। JSONP प्रोटोकॉल की आवश्यकता है कि JSON को फ़ंक्शन कॉल में लपेटा जाए। ब्राउज़र '

3

ऐसा लगता है कि सर्वर गलत सामग्री-प्रकार शीर्षलेख देता है।

+1

मैंने सामग्री प्रकार हेडर 'हेडर ("सामग्री-प्रकार: टेक्स्ट/जावास्क्रिप्ट") जोड़ा है;', इसलिए चेतावनी अब चली गई है। – oshirowanen

6

मैं नहीं जानता कि आप वास्तव में क्या त्रुटि का सामना कर रहे है, लेकिन वहाँ jsonphere

  • error का उपयोग कर के लिए कुछ उपयोगी सुझाव दिए गए हैं: इस हैंडलर क्रॉस-डोमेन स्क्रिप्ट और JSONP अनुरोधों के लिए नहीं बुलाया जाता है।
  • AJAX पैरामीटर में jsonp: 'callback', jsonpCallback: 'jsonpCallback' लिखें। jsonp स्थापना कालबैक में और उसके बाद jsonpCallback को jsonpCallback स्थापित करने में आता है इस तरह क्वेरी स्ट्रिंग देखो: JSONP का उपयोग कर एक JSON ब्लॉक में

    http://domain.com/jsonp-demo.php?callback=jsonpCallback&name=watever

  • भार। कॉलबैक निर्दिष्ट करने के लिए अपने यूआरएल के अंत में एक अतिरिक्त ?callback=? जोड़ देगा।

अपनी पूरी स्क्रिप्ट इस प्रकार दिखाई देगा:

<script> 
    $(document).ready(function(){ 

     $("#useJSONP").click(function(){ 
      $.ajax({ 
       url: 'http://domain.com/jsonp-demo.php', 
       data: {name: 'Chad'}, 
       dataType: 'jsonp', 
       jsonp: 'callback', 
       jsonpCallback: 'jsonpCallback', 
       success: function(){ 
        alert("success"); 
       } 
      }); 
     }); 

    }); 

    function jsonpCallback(data){ 
     $('#jsonpResult').text(data.message); 
    } 
    </script> 

Example here

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