2013-05-15 2 views
6

मैं एक JSONP निम्नलिखित कोड का उपयोग कर काम कर प्रतिक्रिया प्राप्त करने के लिए कोशिश कर रहा हूँ का उपयोग नहीं कर पाया ...JSON_CALLBACK JSONP

$http.jsonp('http://example.com:8888/?callback=JSON_CALLBACK').success(function(response) 
{ 
    console.dir(response); 
}); 

http://example.com:8888/?callback=JSON_CALLBACK रिटर्न Node.js

JSON_CALLBACK ({तारीख के माध्यम से निम्नलिखित: '2013-05-15T08: 53: 51.747Z'});

हेडर कुछ इस तरह Node.js में स्थापित किया जा रहा है ....

res.writeHead(200, {'Content-Type': 'application/json'}); 

फिर भी त्रुटि मैं एक क्रोम कंसोल में मिलता है यह है ...

Uncaught ReferenceError: JSON_CALLBACK is not defined 

हालांकि , अजीब बात है, अगर मैं window.JSON_CALLBACK(response) फ़ंक्शन बनाता हूं तो यह चलाएगा। लेकिन मैंने सोचा कि सफलता मेरी ओर से ऐसा करने के लिए है।

उत्तर

2

आपकी सामग्री-प्रकार शीर्षलेख सही नहीं है।

यदि आप लौटते हैं तो सादा JSON है तो application/json का उपयोग करें। JSONP जावास्क्रिप्ट है, तो आप का उपयोग करना चाहिए application/javascript

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, लेकिन मैंने कोशिश की। मुझे एक ही त्रुटि –

+0

मुझे भी @tomwrong था। मैंने देखा कि इसे फाइल के नामकरण के साथ करना है। मैंने php फ़ाइल में my api (एक php फ़ाइल) का नाम बदलने या JSON_CALLBACK को angular.callbacks._0 में बदलने का प्रयास किया। मुझे लगता है कि यह कोणीय की एक बग है। –

+0

मुझे लगता है कि यह एक बग नहीं है, मुझे लगता है कि यह एक से अधिक कॉलबैक पेश करेगा – blamb

0

मैं इस हैक पाया और यह मेरे लिए काम है

 
    //.........................ini: Hack 
    /* 
     Copy-Paste this code just before your $http request. 
    */  
     var c = $window.angular.callbacks.counter.toString(36); 

     $window['angularcallbacks_' + c] = function (data) { 
      $window.angular.callbacks['_' + c](data); 
      delete $window['angularcallbacks_' + c]; 
     };  
    //.........................end: Hack 

    //Your $http request 
    $http.jsonp(url) 
    .success(function(){ 
     console.log("ok") 
    }) 
    .error(function(data, status, headers, config){ 
     console.error("ko"); 
    }); 
0

यहाँ है एक त्वरित और गंदा समाधान JSON_CALLBACK({ date:'2013-05-15T08:53:51.747Z' }) आउटपुट करने के बजाय, आप angular.callbacks._0({ date:'2013-05-15T08:53:51.747Z' }) आउटपुट करने का प्रयास कर सकते हैं। मुझे विश्वास है कि यह कोणीय में बग है।

$http({ 
    method: 'JSONP', 
    url: 'https://something.com/' + '?callback=JSON_CALLBACK' + '&otherstuffs' 
}); 

पुनश्च:

एक वैकल्पिक आपके url इस तरह से अनुरोध करने के लिए है। यदि आप PHP बैकएंड का उपयोग करते हैं, तो मैंने देखा है कि php फ़ाइल के नाम को कभी-कभी सकारात्मक परिणाम मिलेगा (जैसे index.php का उपयोग करने के बजाय हम api.php आज़मा सकते हैं)। यद्यपि यह पूरी तरह से यादृच्छिक प्रतीत होता है (क्या नाम काम करता है और vise versa) - मुझे लगता है कि यह कैसे करना है कि कोणीय ने जेसन के यूआरएल को कैसे पढ़ा।

ऐसा लगता है कि इस दुर्भाग्यपूर्ण बग का कारण यह है कि कोणीय JSON_CALLBACK से angular.callbacks._0 को प्रतिस्थापित करेगा लेकिन कभी-कभी इसके यूआरएल दुभाषिया के कारण विफल हो जाएगा।

इसके अतिरिक्त, यदि आप जिस सर्वर का उपयोग कर रहे हैं, वह यूआरएल में ?callback=angular.callbacks._0 का समर्थन नहीं कर सकता है (जो सर्वरों के बीच एक आम व्यवहार है)।

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