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

时间:2014-06-19 15:56:15

标签: javascript jquery json node.js

我在 nodejs 上创建了一个简约API,它以JSON格式返回数据。

但是每当我尝试进行ajax #reke调用并将我的API作为网址传递时,我会收到错误并从Chrome判断,我收到"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"

有人可以帮助我吗?

我知道这个问题已被提出,但我无法找到解决方案来修复我的程序。

2 个答案:

答案 0 :(得分:9)

要支持JSONP requests,服务器必须在响应中包含P或“填充”。

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

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

默认情况下,jQuery将包含一个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()

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

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

答案 1 :(得分:-3)

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