2014-06-19 11 views
8

मैं NodeJS जो JSON प्रारूप में डेटा लौटाने पर एक minimalist एपीआई बनाया है मिलता है।अप्रत्याशित टोकन बृहदान्त्र JSON

लेकिन हर बार जब मैं एजेक्स बनाने की कोशिश करता हूं # कॉल प्राप्त करता हूं और यूआरएल के रूप में अपना एपीआई पास करता हूं, तो मुझे एक त्रुटि मिलेगी और क्रोम से निर्णय लेगा, मुझे "Unexpected token :" त्रुटि मिल रही है;

यहाँ में सर्वर कोड NodeJS + व्यक्त:

var 
http = require('http'), 
express = require('express'), 
app  = express(), 
server = http.createServer(app); 

app.get('/', function(req, res) { 
    console.log('req received'); 
     res.setHeader('Content-Type', 'application/json'); 
    res.end(JSON.stringify({ 
    Name : "Tom", 
    Description : "Hello it's me!" 
    })); 

}); 

server.listen(3000, function() { 
    console.log('Listening on 3000'); 
}); 

JSON "/" से लौटे है: {"Name":"Tom","Description":"Hello it's me!"}

यहाँ ग्राहक js से मेरे कॉल है:

$.ajax({ 
    url: findUrl, 
    type: 'get', 
    dataType: 'jsonp', 
    success: function (data) { 
     self.name(data.Name); 
     self.description(data.Description); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 

जब त्रुटि मैं साजिश रचने: "jQuery111108398571682628244_1403193212453 was not called"

कोई मेरी मदद कर सकते हैं?

मैं इस सवाल पहले से ही कहा गया है, लेकिन मैं एक समाधान है जो मेरे कार्यक्रम तय खोजने के लिए प्रबंधन नहीं है पता है।

+0

अपने 'डेटाप्रकार की जाँच करें:

var callback = req.query.callback; var data = JSON.stringify({ Name : "Tom", Description : "Hello it's me!" }); if (callback) { res.setHeader('Content-Type', 'text/javascript'); res.end(callback + '(' + data + ')'); } else { res.setHeader('Content-Type', 'application/json'); res.end(data); } 

ExpressJS भी res.jsonp() कि पहले से ही इस शर्त को लागू करता है में शामिल हैं:

डिफ़ॉल्ट रूप से, jQuery समारोह के नाम के साथ एक callback क्वेरी-स्ट्रिंग पैरामीटर शामिल होंगे '- [$ .ajax()] (http://api.jquery.com/jquery.ajax/) – Andreas

+0

@Andreas: मुझे लगता है कि आप" jsonp "का उल्लेख है, मैं यह करने के लिए" json "बदल दिया है। अब मैं प्राप्त कर रहा हूं "XMLHttpRequest http: // localhost: 3000/नहीं लोड नहीं कर सकता है। अनुरोध 'संसाधन' पर 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति' शीर्षलेख मौजूद नहीं है। इसलिए मूल 'शून्य' को एक्सेस की अनुमति नहीं है।" मैं इसे कैसे ठीक करूं ? –

उत्तर

9

के बजाय "json" JSONP requests का समर्थन करने के लिए, सर्वर P, या "पैडिंग," जवाब में शामिल करना होगा।

jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"}) 

सिंटैक्स त्रुटि, "Unexpected token :", क्योंकि JSONP जावास्क्रिप्ट, जहां {...} भी प्रतिनिधित्व करता blocks के रूप में पार्स किया जाता है। यह वैश्विक फ़ंक्शन कॉल में पारित डेटा को परिभाषित करने के लिए जेएसओएन और जावास्क्रिप्ट के समान वाक्यविन्यास का लाभ उठाता है।

app.get('/', function(req, res) { 
    console.log('req received'); 

    res.jsonp({ 
     Name : "Tom", 
     Description : "Hello it's me!" 
    }); 
}); 
-3

आप डेटाप्रकार उपयोग करना चाहते हैं: "jsonp"

+0

वहाँ विभिन्न कारणों से आप jsonp का उपयोग करना चाहते हैं, एक उदाहरण के अलग-अलग डोमेन –

+0

सहमति भर में कॉल करने के लिए सक्षम होने के लिए है, jsonp CORS के लिए है, यदि आप जावास्क्रिप्ट के माध्यम से एक क्रॉस डोमेन async अनुरोध बनाने की जरूरत है तुम सिर्फ json उपयोग नहीं कर सकते । – Karl

+1

JSONP सीओआरएस के लिए नहीं है। JSONP वह हैक जिसे हमने सीओआरएस विकसित और ब्राउज़र द्वारा समर्थित करने से पहले उपयोग किया था। – Quentin

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