将 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 的数据格式。
这样应该就不会出错了,我是总算成功的拿到了数据。
嗯,当一只小白真的心好累。