node.js与ajax交互之 json 与 jsonp 数据格式问题

时间:2022-12-18 09:24:04

将 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  的数据格式。

这样应该就不会出错了,我是总算成功的拿到了数据。

嗯,当一只小白真的心好累。