首先,我在这里阅读了很多帖子,但在我自己的代码中没有找到问题,包括这个问题$.ajax and JSONP. ParseError and Uncaught SyntaxError: Unexpected token :
我正在构建Safari扩展,需要发布/到达我的服务器并处理响应。 Safari正在抛出这个错误:
SyntaxError: Unexpected token ':'
和此消息
"handle was not called"
其中'handle'是此扩展代码中的回调:
var server="http://localhost:3001/api/login";
$.ajax({
type : "GET",
url : server,
data: {"something" : "else"}
dataType: 'jsonp',
jsonp:false,
jsonpCallback: 'handle',
success: function(data, text){
var json = $.parseJSON(data);
console.log(json)
},
error: function (request, status, error) {
console.log(error );
}
});
和Express.js(2.5.5)代码是:
//in the config
app.set( "jsonp callback", true )
app.all('/', function(req, res, next){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.get('/api/login', function(req, res){
res.json(
{
"success": {"that":"this"}
}
);
});
注意:我尝试过res.jsonp,设置内容类型等,但响应相同。我在这个过程中学到了关于CORS和Ajax的TON,但我的眼睛显然很黯淡。点击我的高跟鞋三次也没有帮助。
线索?谢谢!
答案 0 :(得分:2)
通过设置dataType: 'jsonp'
,它将为您解析JSON。 jsonp: true
不正确。这个组合应该有效:
$.ajax({
url : "http://localhost:3001/api/login",
data: {"something" : "else"},
dataType: 'jsonp',
success: function(data){
// It is already an object, don't parse it again.
console.log(data)
},
error: function (request, status, error) {
console.log(error );
}
});
与
app.get('/api/login', function(req, res){
res.jsonp({
"success": {"that":"this"}
});
});
// Remove this:
app.set( "jsonp callback", true )
$.ajax({
url : "http://localhost:3001/api/login",
data: {"something" : "else"},
dataType: 'json',
success: function(data){
// It is already an object, don't parse it again.
console.log(data)
},
error: function (request, status, error) {
console.log(error );
}
});
和
// This is 'app.use', not 'app.all'.
app.use('/', function(req, res, next){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.get('/api/login', function(req, res){
res.json({
"success": {"that":"this"}
});
});