node.js與ajax互動之 json 與 jsonp 資料格式問題
阿新 • • 發佈:2019-02-02
將 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 的資料格式。
這樣應該就不會出錯了,我是總算成功的拿到了資料。
嗯,當一隻小白真的心好累。