2013-08-14 14 views
14

मैं सैमसंग स्मार्ट टीवी ऐप को node.js के साथ बनाने की कोशिश कर रहा हूं।node.js एक्सप्रेस के साथ jsonp का उपयोग कैसे करें

मेरी प्रोजेक्ट में, मैं अपने पीसी को सर्वर पीसी के साथ संचार करना चाहता हूं।

कई वेबसाइटों के मुताबिक, मैं इसे "जेसनपी" के साथ कर सकता हूं।

यहां एक क्लाइंट साइड कोड है जो मैंने पाया।

<html> 
<head> 
    <title>jsonp test</title> 
    <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>  
    <script type="text/javascript"> 
     $(function(){    
      $('#select_link').click(function(e){ 
       e.preventDefault(); 
       console.log('select_link clicked'); 

       function test(data){ 
        return {"message":"ok"}; 
       } 

       $.ajax({ 
        dataType: 'jsonp', 
        data: "data=yeah",      
        jsonp: 'callback', 
        url: 'http://172.20.10.3:3000/endpoint?callback=?',      
        success: function(data) { 
         console.log('success'); 
         console.log(JSON.stringify(data)); 
        } 
       }); 
      });    
     }); 
    </script> 
</head> 
<body> 
    <div id="select_div"><a href="#" id="select_link">Test</a></div>  
</body> 

और, यहाँ एक सर्वर साइड कोड है कि मैंने पाया है।

ये कोड मेरे पीसी (सर्वर पीसी) पर काम कर रहे हैं, लेकिन जब मैं अन्य कंप्यूटर पर क्लाइंट पेज खोलता हूं, तो यह काम नहीं करता है।

कंसोल बस मुझे इस लॉग दे:

X GET http://172.30.2.2:3000/endpoint?callback=jQuery11020685203080996871_1376482492523&data=yeah&_=1376482492524 

मैं क्रॉस-डोमेन को संभालने के लिए jsonp उपयोग करना चाहते हैं, लेकिन यह मुझे लगता है कि काम नहीं करता है ...

क्या मैं ठीक करने के लिए क्या कर सकते हैं इस?

कृपया मुझे सहायता दें !!

+1

के लिए ExpressJS JSONP जा सकते हैं क्या आप सुनिश्चित हैं कि अन्य व्यक्ति का कंप्यूटर आपके पास पहुंच सकता है (उसी नेटवर्क पर, पिंग कर सकते हैं आदि)? – arghbleargh

+0

@arghbleargh टिप्पणी के लिए धन्यवाद !! और मैंने जांच की है ... अन्य मेरे सर्वर तक पहुंच सकते हैं ... – newbeeep

+0

नेटवर्क इंस्पेक्टर को देखने का प्रयास करें और देखें कि अनुरोध और प्रतिक्रिया क्या हैं। – arghbleargh

उत्तर

36

साथ

res.send(req.query.callback + '('+ JSON.stringify(obj) + ');');

को बदलने के लिए प्रयास करें बस

res.jsonp(obj) 

का उपयोग आप अधिक जानकारी

+0

एक्सप्रेस में यह $ .getJSON के माध्यम से ऐसा करना संभव है और एक json recv एक ही पृष्ठ पर प्रतिक्रिया? Respond.jsonp का उपयोग करके ऐसा करने से परिणाम एक नए पृष्ठ – user2290820

+0

में प्रस्तुत होता है यह स्पष्ट नहीं है कि आप क्या करने का प्रयास कर रहे हैं। क्या आप इसे विवरण के साथ प्रश्न के रूप में पोस्ट कर सकते हैं @ user2290820 –

+0

यहां सवाल है: https://stackoverflow.com/questions/31891606/receive-ajax-post-back-on-client-from-express-without-reload – user2290820

5

res.jsonp(req.query.callback + '('+ JSON.stringify(obj) + ');'); 
+7

मुझे नहीं लगता कि आपको ऑब्जेक्ट को स्ट्रिंग करने और कॉलबैक के साथ लपेटने की आवश्यकता है यदि आप res.jsonp() – rob

+1

का उपयोग करते हैं तो यह सुरक्षित नहीं है क्योंकि आप 'कॉलबैक' यूआरएल पैरामीटर के माध्यम से स्क्रिप्ट इंजेक्शन कर सकते हैं। आपको js-string-escape का उपयोग करके पहले कॉलबैक पैरामीटर मान से बचने की आवश्यकता है: https://www.npmjs.com/package/js-string-escape – Nivco

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