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

IT技术 javascript jquery json node.js
2021-01-20 21:57:35

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

但是每次我尝试进行 ajax#get 调用并将我的 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"

有人能帮我吗?

我知道已经有人问过这个问题,但我还没有找到修复我的程序的解决方案。

2个回答

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

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!"
    });
});
您对 JSONP 请求的回答中的链接已损坏。请更新。
2021-03-29 21:57:35

您想使用 dataType: "json" 而不是 "jsonp"

您想使用 jsonp 的原因有多种,其中一个示例是能够跨域调用
2021-03-15 21:57:35
同意,jsonp 是针对 CORS 的,如果您需要通过 javascript 进行跨域异步请求,则不能只使用 json。
2021-03-16 21:57:35
JSONP 不适用于 CORS。JSONP 是我们在 CORS 开发和浏览器支持之前使用的 hack。
2021-04-04 21:57:35
谢谢你澄清这就是我的意思。JSONP 适用于无法使用 CORS 的情况。
2021-04-04 21:57:35