将 dataType 从 json 改成 jsonp 之后,新的问题出现了,就是 ajax 无法解析 json 类型的数据。
这就很尴尬了,看了好几篇怎么解析的问题,都没看懂。后来终于看懂了。
简而言之就是 dataType 改成 jsonp 的数据格式以后,再传 json 格式的数据就会报错了。
那么,该传什么格式的数据呢?
我的完整的ajax代码如下所示:
$.ajax({
type : "POST",
url : path,
data : JSON.stringify(jsonData),
contentType : "application/jsonp",
dataType :"jsonp" ,
jsonp: "callback",
jsonpCallback: "showData",
success:function(msg) {
alert("这是返回的数据"+msg);
},
error:function(err){
alert("这是失败的信息"+err);
}
});
可以看到添加了两个属性,jsonp 和 jsonpCallback.
第一个意思是jsonp格式会调用一个回调函数,第二个是返回函数的名字。
然后,msg 能接收到的正确的数据格式是: json回调函数的名字(json数据格式的数据)
所以,在 server.js 应该这样写:
app.get('/', function (req, res,next) {
// res.json({ret_code:0});
var _callback = req.query.callback;
var _data ='{"id":"123","name":"jack","arg":"11111"}';
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');
res.setHeader("Content-Type", "application/json;charset=utf-8");
res.send(_callback + '(' + JSON.stringify(_data) + ')');
next();
});
重点是 callback 及 send 的数据格式。
这样应该就不会出错了,我是总算成功的拿到了数据。
嗯,当一只小白真的心好累。