1. 程式人生 > >node.js與ajax互動之 json 與 jsonp 資料格式問題

node.js與ajax互動之 json 與 jsonp 資料格式問題

將 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  的資料格式。

這樣應該就不會出錯了,我是總算成功的拿到了資料。

嗯,當一隻小白真的心好累。