我在 nodejs 上创建了一个简约的API,该API 以JSON格式返回数据。
但是每次我尝试进行ajax#get调用并将API作为URL传递时,都会收到错误消息,从Chrome判断,我得到了"Unexpected token :"错误消息。
"Unexpected token :"
这是 nodejs + express中 的服务器代码:
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!"}。
"/"
{"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"
"jQuery111108398571682628244_1403193212453 was not called"
有人能帮我吗?
我知道已经问过这个问题,但是我还没有找到解决我程序的解决方案。
为了支持JSONP请求,服务器必须在响应中包含P或“ Padding ”。
P
jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})
语法错误,"Unexpected token :"是因为JSONP被解析为JavaScript,其中JSON {...}也代表blocks。它仅利用JSON和JavaScript的相似语法来定义要传递给全局函数调用的数据。
{...}
默认情况下,jQuery将包含callback带有函数名称的query-string参数:
callback
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()已经实现此条件的:
res.jsonp()
app.get( '/', function( req, res ) { console.log( 'req received' ); res.jsonp({ Name : "Tom", Description : "Hello it's me!" }); });