關於XMLHttpRequest.open()設定提交方式 (POST,GET)(2008-07-29 22:59:16)標籤:ajax javascript it
眾所周知XMLHttpRequest的open()方法裡的第一個參數是用來設定向伺服器提交的方式,這是絕對的嗎?不一定哦,看看下面的代碼。
代碼片斷如下:
function simpleStrSubmit()
{
var xmlReqFile = createXMLReqFile();
xmlHttp.open("GET","ProcessServlet",true);//指定GET方式提交
xmlHttp.onreadystatechange = processRequest;//回呼函數
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send("xml="+xmlReqFile);
}
描述:其中ProcessServlet是一個Servlet
問題:open方法的第一個參數不論寫"GET"或是"POST",在ProcessServlet裡都是調用的doPost方法??這是為什嗎?為什麼不調用doGet方法???
答案:按照哪種方式提交不是由open()方法的第一個參數完全決定的,還與send()方法有關。
一、當open()方法裡指定的是GET,並且
1、send()方法的參數是""或者null,跟蹤代碼可以知道調用了Servlet中的doGet方法
2、send()方法的參數是地址修正的方式,或者就是一個字串,都調用doPost方法,例如:
xmlHttp.open("GET",
"ProcessServlet?choose="+document.getElementById("choosejsfile").value,
true);//open裡調用GET方法。
xmlHttp.send("aaa=dd"); //a
xmlHttp.send("paramTest"); //b
xmlHttp.send(" "); //c
xmlHttp.send(null); //d
xmlHttp.send(""); //e
對於a、b、c、d、e五中send()函數,只有d和e會調用doGet方法,a、b、c三種方式均調用 doPost方法。
二、當open()方法裡指定的是POST,則對於以上5種send()函數,伺服器均會調用doPost方法。
所以使用哪種方式提交是由open方法和send方法共同決定的。