我正在运行一个快速服务器,我正在其中检查对某些 url 请求的 get 请求。现在在回复中,我正在尝试以 json 格式发送回复,以便我可以对页面进行 ajax 调用并获取数据。现在要进行跨域请求,我必须使用 jsonp。现在,当请求完成并且数据返回到回调时,它会显示错误Uncaught SyntaxError: Unexpected token :
。以下是服务器和客户端代码
服务器
var express=require('express');
var app = express();
var http = require('http').Server(app);
var port=Number(3000);
var server_ip_address = '127.0.0.1';
http.listen(port,server_ip_address, function(){
console.log('listening on '+port);
});
app.get('/test', function (req, res) {
console.log(req.query);
res.send({message:'hello'});
});
客户
$.ajax({
url: 'http://localhost:3000/test',
type: 'GET',
dataType:'jsonp',
crossDomain:true,
data: {
username: $('#username').val(),
password: $('#pwd').val()
},
success: function(result){
console.log($.parseJSON(result));
},
jsonp:'jsonp'
});
在我尝试使用的服务器代码中
res.setHeader('Content-Type', 'application/javascript');
res.send({message:'recieved'});
甚至
res.setHeader('Content-Type', 'application/json');
res.send({message:'recieved'});
在客户端中,我尝试按原样记录结果对象,但无济于事。任何帮助,不胜感激。此外,同样欢迎任何使用其他方法获取数据的建议。提前谢谢。
方法是使用res.jsonp()
而不是设置自己的标头等:
app.get('/test', function (req, res) {
console.log(req.query);
res.jsonp({message: 'hello'});
});
默认回调参数只是callback
但您可以像这样更改它(如果需要):
app.set('jsonp callback name', 'cb');
注意:您可能需要从客户端代码中删除分配回调名称的jsonp:'jsonp'
。如果您提交数据(尤其是敏感数据),我还建议您将其从 GET 交换为 POST 请求。