1
在過去的幾個小時試圖調試這件事之後,我的頭撞在牆上,終於決定尋求幫助。AJAX發佈請求不會發送JSON數據
我有這樣的數據,我想發送到ashx處理程序(這是一個很好的數據)。
var value = [{"start":["3,0"],"block":["0,0","1,2"],"end":["2,1"],"star":"gold","moves":3,"difficulty":"easy"},{"start":["1,0"],"block":["1,3","3,0","4,2"],"end":["0,1"],"star":"gold","moves":4,"difficulty":"easy"},{"start":["3,0"],"block":["0,0","0,2","2,0","3,2"],"end":["1,0"],"star":"silver","moves":4,"difficulty":"easy"},{"start":["3,0"],"block":["0,0","2,0","3,1"],"end":["1,3"],"star":"gold","moves":6,"difficulty":"easy"},{"start":["0,0","2,0"],"block":["2,3"],"end":["1,2"],"star":"gold","moves":4,"difficulty":"easy"},{"start":["2,1"],"block":["0,1","0,2","1,0","1,1","2,0","2,2","2,3","3,1","3,2"],"end":["1,3"],"star":"gold","moves":5,"difficulty":"easy"},{"start":["1,0"],"block":["0,0","3,0","2,3"],"end":["4,1"],"star":"gold","moves":5,"difficulty":"medium"},{"start":["0,0","0,4"],"block":["0,5","0,2","3,3"],"end":["1,1"],"star":"gold","moves":7,"difficulty":"medium"},{"start":["0,0","2,6"],"block":["0,5","3,3","2,1"],"end":["3,5"],"star":"gold","moves":8,"difficulty":"medium"},{"start":["4,1","4,3"],"block":["3,0","4,2"],"end":["0,1","1,4","3,2"],"star":"gold","moves":8,"difficulty":"medium"},{"start":["1,2","3,4","4,2"],"block":["0,2","3,0"],"end":["2,3"],"star":"gold","moves":9,"difficulty":"medium"},{"start":["3,1","3,6"],"block":["0,0","0,3","0,7","2,5"],"end":["2,3"],"star":"gold","moves":11,"difficulty":"hard"},{"start":["0,7","0,2"],"block":["2,0","3,2","0,6","1,6","1,7"],"end":["3,3"],"star":"gold","moves":12,"difficulty":"hard"},{"start":["0,0","0,3"],"block":["0,1","2,2","3,0","3,3"],"end":["4,2"],"star":"gold","moves":8,"difficulty":"hard"},{"start":["0,0","0,6"],"block":["0,1","1,0","1,1","2,5","3,7"],"end":["3,4"],"star":"gold","moves":13,"difficulty":"hard"},{"start":["0,0","0,2","0,4","2,0","2,4","3,2","4,0","4,4"],"block":["0,1","0,3","1,0","1,1","1,2","1,3","1,4","2,1","2,3","3,0","3,1","3,3","3,4","4,1","4,2","4,3"],"end":["2,2"]},{"start":["0,0","0,2","0,4","1,1","2,0","2,4","3,2","4,0","4,2","4,4"],"block":["0,1","0,3","1,0","1,2","1,3","1,4","2,1","2,3","3,0","3,1","3,3","3,4","4,1","4,3"],"end":["2,2"],"star":"silver","moves":42,"difficulty":"medium"},{"start":["0,0","3,3","4,0"],"block":["0,1","2,3","3,0","4,4"],"end":["0,3"],"star":"gold","moves":11,"difficulty":"hard"},{"start":["0,4","1,1","3,5","4,2"],"block":["0,0","3,1","4,1"],"end":["2,3"],"star":"gold","moves":14,"difficulty":"hard"},{"start":["0,0","3,2","3,6"],"block":["0,4","0,5","4,4"],"end":["1,1"],"star":"gold","moves":13,"difficulty":"hard"},{"start":["0,2"],"block":["0,7","4,0","4,6","5,0","6,0","6,5"],"end":["2,0"]}]
,我使用這個函數來發送請求:
function storeValue(value) {
var val = encodeURIComponent(JSON.stringify(value));
$.ajax({
url: "DataHandler.ashx",
async: false,
data: { key: "someKey", value: val, action: "store" },
datatype: "json",
success: function (data) {
}
});
};
在DataHandler.ashx,這是相關代碼:
public class DataHandler : IHttpHandler, IReadOnlySessionState
{
public void ProcessRequest(HttpContext context)
{
var query = context.Request.QueryString;
string action = query["action"];
string key = query["key"];
string val = query["value"];
}
}
經過調試,我發現DataHander甚至沒有被調用。如果我刪除value
從查詢字符串,像這樣:
data: { key: key, action: "store" },
ProcessRequest方法將被稱爲我所期望的。
我在猜測value
可能太長了。爲什麼它不被髮送,我該如何解決?
您是否試圖通過Fiddler或Firebug監視您的請求?此外,這是一個GET可能會導致你運行到一個URI +查詢字符串的最大長度,我認爲這是2000-4000字符限制。我認爲IE8有2048個限制。如果您通過Fiddler運行您的請求,您是否看到它被髮送出去?如果是這樣,你會在響應中看到什麼錯誤(如果有的話)? – 2011-06-07 18:18:14
爲什麼你沒有在'$ .ajax'中添加'type:「POST」'?其他的方式,我認爲它的GET請求,並且數據必須在這樣一個字符串中給出:'var = val&var2 = val2'等等...... – nagisa 2011-06-07 18:23:37
@David它有一個'400 Bad Request'錯誤。 – 2011-06-07 18:23:52