2012-10-12 26 views
7

सर्वर अनुरोध URL में किसी भी पैरामीटर को स्वीकार नहीं करेगा, इसलिए मुझे URL में सभी अतिरिक्त पैरामीटर को हटाने की ज़रूरत है और निश्चित रूप से मैं सर्वर को नियंत्रित नहीं कर सकता।क्या मैं यूआरएल में '? कॉलबैक =' पैरामीटर जोड़ने के बिना एक jQuery JSONP अनुरोध कर सकता हूं?

jQuery:

$.ajax({ 
    type: 'GET', 
    url: 'http://cross-domain.com/the_jsonp_file, 
    jsonpCallback: 'jsonCallback', 
    contentType: 'application/json', 
    cache: 'true', 
    dataType: 'jsonp', 
    success: function(json) { 
     console.log(json); 
    }, 
}); 

JSONP फ़ाइल:

jsonCallback({"test": "hello"}); 

जब मैं भेज Ajax अनुरोध, URL ऐसा दिखाई देगा कि:

http://cross-domain.com/the_jsonp_file?callback=jsonCallback 

लेकिन मैं इस की जरूरत है (बिना पैरामीटर):

http://cross-domain.com/the_jsonp_file 

संपादित करें:

यहाँ मेरी पूरी स्थिति है:

function MyClass(imgs) { 
    // imgs is array of URLs 
    this.imgs = imgs; 

    this.submit = function() { 
     // button click event triggers this method 
     this._show(); 
    }; 

    this._show = function() { 
     var _this = this; 

     for (var i = 0; i < _this.imgs.length; i++) { 
      (function($, j) { 
       $.ajax({ 
        type: 'GET', 
        url: _this.imgs[j], 
        jsonp : false, 
        jsonpCallback: 'jsonCallback', 
        cache: 'true', 
        dataType:'jsonp', 
        success: function(json) { 
         console.log(_this.imgs[j]); 
           }, 
       }); 
      })(jQuery, i); 
     }; 
    }; 
}; 

और मैं इस त्रुटि संदेश मिला:

Uncaught TypeError: Property 'jsonCallback' of object [object Window] is not a function 

अजीब बात कुछ अनुरोध सफलतापूर्वक बुला रहे हैं jsonCallback है।

+0

सर्वर क्वेरी स्ट्रिंग्स के साथ अनुरोधों को पूरी तरह से मना कर देता है? –

+1

आप jQuery का उपयोग करने के बजाय JSONP कोड लिखने के लिए सबसे अच्छा हो सकता है ... – lonesomeday

+0

मैंने AJAX सेटिंग में 'डेटा टाइप:' स्क्रिप्ट 'की कोशिश की और यह बिना किसी पैरामीटर के यूआरएल बना रहा है, लेकिन मुझे नहीं पता कि कॉलबैक कैसे बनाया जाए कार्य काम कर रहा है। – Jonypoins

उत्तर

9

jQuery डॉक्स की जाँच करें - वे jsonp कहने के लिए कहते हैं: झूठे और jsonpCallback: 'callbackFunction' ajax आर्ग में .... की तरह:

$.ajax({ 
    url: 'http://cross-domain.com/the_jsonp_file', 
    jsonp : false, 
    jsonpCallback: 'jsonCallback', 
    // contentType: 'application/json', -- you can't set content type for a <script> tag, this option does nothing for jsonp | KevinB 
    cache: 'true', 
    dataType : 'jsonp' 
}); 

http://api.jquery.com/jQuery.ajax/

+0

धन्यवाद। ऐसा लगता है लेकिन मुझे यह त्रुटि संदेश मिला: 'अनकॉट टाइप एरर: ऑब्जेक्ट की संपत्ति' जेसन कॉलबैक '[ऑब्जेक्ट विंडो] एक फंक्शन नहीं है। कुछ तत्व सफलतापूर्वक कॉलबैक फ़ंक्शन को कॉल कर रहे हैं। – Jonypoins

+0

@ जॉनीपैंक्स क्या आप jQuery 1.5+ का उपयोग कर रहे हैं? –

+0

मैं jQuery 1.8.2 – Jonypoins

0

JSONP हिस्से के रूप में एक कॉलबैक की आवश्यकता है यूआरएल का मैं उस विवरण के आधार पर अनुमान लगाऊंगा कि जिस सर्वर पर आप पहुंच रहे हैं वह JSONP का समर्थन नहीं करता है।

jQuery आपके दस्तावेज़ में एक स्क्रिप्ट टैग जोड़ता है, जो जोड़े गए एपीआई अनुरोध को चलाता है, प्रतिक्रिया आपके कोड में कॉलबैक फ़ंक्शन को कॉल करती है (यह इसे सरल बना रही है)।

यदि आप अधिक सटीक वर्णन चाहते हैं तो आप विकिपीडिया पर एक नज़र डाल सकते हैं। http://en.wikipedia.org/wiki/JSONP#How_it_works

+0

हां, सर्वर JSONP का समर्थन नहीं करता है लेकिन मैं JSONP का उपयोग कर सर्वर से संसाधनों का उपयोग करना चाहता हूं। – Jonypoins

+2

दुर्भाग्य से सर्वर को काम करने के लिए सर्वर को JSONP का समर्थन करना होगा। अन्यथा आपको ऊपर वर्णित स्क्रिप्ट त्रुटि मिलती है। आपके पास 2 अन्य विकल्प हैं: 1. प्रॉक्सी सेट अप करना। 2. सीओआरएस (इसके लिए सर्वर कॉन्फ़िगरेशन की भी आवश्यकता है) – Dcullen

+0

"प्रत्येक अनुरोध एक ही कॉलबैक जेसन कॉलबैक को कॉल करता है, इसलिए मैंने सोचा कि यह समस्या है।" - यह मेरी समस्या थी। धन्यवाद। +1 – offset

1

प्रत्येक अनुरोध एक ही कॉलबैक jsonCallback पर कॉल करता है, इसलिए मैंने सोचा कि यह समस्या है।

पहले, जावास्क्रिप्ट दस्तावेज़ में:

<script type="text/javascript"> 
    new Gallery([ 
     ['http://cross-domain.url/whatever', '27b2afa5c77c2510'], 
     ['http://cross-domain.url/whatever', '13df51b2f2801bc1'], 
     ['http://cross-domain.url/whatever', '4de326fc9a2c5a24'], 
     ['http://cross-domain.url/whatever', '60c266a73ba699bc'], 
     ['http://cross-domain.url/whatever', '3db01e95aaf2b9f2'], 
     ['http://cross-domain.url/whatever', '94eb17f9b0e1be9c'], 
     ['http://cross-domain.url/whatever', 'ca8c5c3c0b8cd5ae'], 
     ['http://cross-domain.url/whatever', '6b0f5c5737ee88fd'], 
     ['http://cross-domain.url/whatever', '318d8ebb51a97a15'], 
     ['http://cross-domain.url/whatever', 'f5028c8b62e81a8b'], 
    ]); 
</script> 

क्लाइंट अपलोड JSONP फ़ाइल (सिर्फ एक और जावास्क्रिप्ट फ़ाइल) सर्वर से इस तरह:

jsonCallback_27b2afa5c77c2510({"test": "hello"}); 

जोड़ा jsonCallback_ के बाद यादृच्छिक हेक्स स्ट्रिंग प्रत्येक को अलग करने के jQuery की डिफ़ॉल्ट कॉलबैक जैसी अनुरोध करता है।

इनपुट से यादृच्छिक हेक्स स्ट्रिंग पढ़ें और jsonpCallback के रूप में स्थापित:

function Gallery(imgs) { 
    // imgs is array of URLs 
    this.imgs = imgs; 

    this.submit = function() { 
     // button click event triggers this method 
     this._show(); 
    }; 

    this._show = function() { 
     var _this = this; 

     for (var i = 0; i < _this.imgs.length; i++) { 
      (function($, j) { 
       $.ajax({ 
        type: 'GET', 
        url: _this.imgs[j][0], 
        jsonp : false, 
        jsonpCallback: 'jsonCallback_' + _this.imgs[j][1], 
        cache: 'true', 
        dataType:'jsonp', 
        success: function(json) { 
         // Process 
         console.log(json.test); 
        }, 
       }); 
      })(jQuery, i); 
     }; 
    }; 
}; 

धन्यवाद @Adam @Kevin बी @Dcullen और हर कोई!: डी

p.s: मैंने केवल उपरोक्त प्रत्येक स्रोत टाइप किया है उदाहरण के लिए, यह सही नहीं हो सकता है।