Javascript jQuery.ajax#get之后出现意外的标记冒号JSON
我在nodejs上创建了一个以JSON格式返回数据的极简API 但每次我尝试进行ajax#get调用并将API作为URL传递时,我都会得到一个错误,从Chrome判断,我得到了一个Javascript jQuery.ajax#get之后出现意外的标记冒号JSON,javascript,jquery,json,node.js,Javascript,Jquery,Json,Node.js,我在nodejs上创建了一个以JSON格式返回数据的极简API 但每次我尝试进行ajax#get调用并将API作为URL传递时,我都会得到一个错误,从Chrome判断,我得到了一个“意外标记:错误 下面是nodejs+express中的服务器代码: 从“/”返回的JSON是:{“Name”:“Tom”,“Description”:“你好,是我!”} 这是我从客户端js打来的电话: $.ajax({ url: findUrl, type: 'get', dataType:
“意外标记:
错误
下面是nodejs+express中的服务器代码:
从“/”
返回的JSON是:{“Name”:“Tom”,“Description”:“你好,是我!”}
这是我从客户端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);
}
});
绘制错误时,我得到:“jquery11108398571682628244\u 1403193212453未被调用”
有人能帮我吗
我知道已经有人问过这个问题,但我还没有找到解决方案来修复我的程序。如果要使用数据类型:“json”而不是“jsonp”来支持,服务器必须在响应中包含p
,或“Padding”
jQuery111108398571682628244_1403193212453({"Name":"Tom","Description":"Hello it's me!"})
语法错误,“意外标记:”
,是因为JSONP被解析为JavaScript,其中{…}
也表示。它只是利用JSON和JavaScript的类似语法来定义传递给全局函数调用的数据
默认情况下,jQuery将包含一个带有函数名的回调查询字符串参数:
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还包括已实现此条件的:
app.get( '/', function( req, res ) {
console.log( 'req received' );
res.jsonp({
Name : "Tom",
Description : "Hello it's me!"
});
});
检查你的数据类型
-@Andreas:我猜你指的是“jsonp”,我把它改成了“json”。我现在看到“XMLHttpRequest无法加载。请求的资源上不存在'Access Control Allow Origin'标头。因此不允许访问Origin'null'。“如何解决此问题?使用jsonp有不同的原因,一个例子是能够跨不同域调用,jsonp用于CORS,如果需要通过javascript发出跨域异步请求,则不能仅使用json。JSONP不适用于CORS。JSONP是我们在CORS被开发出来并得到浏览器支持之前使用的黑客。谢谢你澄清我的意思。JSONP适用于无法使用CORS的情况。JSONP请求的答案中的链接已断开。请更新。
app.get( '/', function( req, res ) {
console.log( 'req received' );
res.jsonp({
Name : "Tom",
Description : "Hello it's me!"
});
});