跨服务器ajax请求服务器返回的json对象显示错误意外的令牌:

时间:2016-02-25 08:54:50

标签: javascript json ajax express cross-domain

我正在运行一个快速服务器,我在其中检查对某些网址请求的请求。现在在回复中我试图以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'});

在客户端我尝试记录结果对象,但无济于事。任何帮助表示赞赏。此外,使用其他方法获取数据的任何建议同样受欢迎。提前谢谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用res.jsonp()而不是设置自己的标题等:

app.get('/test', function (req, res) {
   console.log(req.query);
   res.jsonp({message: 'hello'});
});

默认的回调参数只是callback,但您可以更改它(如果需要),如下所示:

app.set('jsonp callback name', 'cb');

note :您可能必须从客户端代码中删除jsonp:'jsonp',因为它指定了回调的名称。如果您要提交数据(尤其是敏感数据),我还建议您将其从GET交换为POST请求。