1. 程式人生 > >在使用ajax向後臺傳送json資料,存在格式不正確的問題

在使用ajax向後臺傳送json資料,存在格式不正確的問題

在一次servlet伺服器的專案中,想在前臺使用json向後臺傳送請求,其中data的格式如下:

var requestData = {
    	"services": [{
    		"lightbulb" : [{"alpha":0}],
    		"operation_status":[{"status":0}]
    }],
        "device_type":	util.getQuery("device_type"),
        "device_id":		util.getQuery("device_id"),
        "open_id":		util.getQuery("open_id"),
    };
ajax傳送程式碼如下:
$.ajax({
    		url:'/panel/device',
    		type:'GET',
    		dataType:'json',
    		data:requestData,
    		success:function(data){
    			if('true' == data.flag){
            		console.log("申請資料成功:" + JSON.stringify(data));
            		//renderPage(data);
            	}
    			else{
    				console.log("申請回饋:" + JSON.stringify(data));
    			}
    		},
    		error:function(data){
    			console.log("獲取資料失敗:" + JSON.stringify(data));
    		}
    	});

在後臺servlet中使用getParameter方法獲取data,對於device_type,device_id和open_id的獲取沒有問題,但services竟然為null。

在檢視ParameterMap之後,發現我的json資料被解析成奇怪的資料:

{"services[lightbulb][alpha]":["0"],"services[operation_status][status]":["0"],"device_type":[""],"device_id":["gh_1eebc4626432_b3c36eb78c00a1d1"],"open_id":[""]}

這顯然存在瞭解析的錯誤。反覆檢查、修改requestData的格式,修改dataType以及ContentType均不奏效。後來,受網上啟發,將services部分單獨取出來,變成如下的形式:

var services = {
    		"lightbulb" : [{"alpha":0}],
    		"operation_status":[{"status":0}]
    }
    
    var requestData = {
    	"services": JSON.stringify(services),
        "device_type":	util.getQuery("device_type"),
        "device_id":		util.getQuery("device_id"),
        "open_id":		util.getQuery("open_id"),
    };

結果成功解決了這一問題。雖說是解決了,但只是採用了繞開問題的方法,對於這個問題的發生表示不解,希望能有高手幫小生指點迷津。