jQuery.ajax#get后出现意外的令牌冒号JSON

我在nodejs上创build了一个以JSON格式返回数据的极简API。

但每次我尝试做一个Ajax#获得调用,并通过我的API作为URL,我会得到一个错误,并从Chrome判断,我得到一个"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!"}

这是我从客户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"

有人能帮我吗?

我知道这个问题已经被问到,但我还没有设法find一个解决scheme,修复我的程序。

为了支持JSONP请求 ,服务器必须在响应中包含P或“ Padding ”。

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

语法错误"Unexpected token :"是因为JSONP被parsing为JavaScript,其中{...}也表示块 。 它只是利用JSON和JavaScript类似的语法来定义传递给全局函数调用的数据。

默认情况下,jQuery将包含一个带有函数名称的callback查询string参数:

 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()

 app.get( '/', function( req, res ) { console.log( 'req received' ); res.jsonp({ Name : "Tom", Description : "Hello it's me!" }); }); 

你想使用dataType:“json”而不是“jsonp”