Ajax調用有些懷疑我有一個jQuery腳本的一些問題(我在JQuery的世界是新的):關於JQuery的
在我有以下鏈接查看頁面:
<li>
<a id="byHeader" href="<c:url value="/mapping/header" />">By presence of header</a>
</li>
所以點擊在這個鏈接上,我生成一個HTTP請求到「/ mapping/header」文件夾。
現在在視圖頁我也有相關的previus鏈接下面的jQuery代碼:
$("#byHeader").click(function(){ // Select the link having id="byHeader" and assign to it the following callback function executed on the click event
var link = $(this); // Variable refered to the link tag that triggered the event
/* La chiamata AJAX non viene invocata su un oggetto particolare (quindi direttamente su $)
I parametri di input sono: 1) L'URL del link selezionato 2) Il tipo di risposta previso (una stringa)
*/
$.ajax({ url: this.href, dataType: "text",
// Before sending the HTTP Request: execute a function that add an Header to this HTTP Request
beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); },
// Success case:
success: function(form) {
MvcUtil.showSuccessResponse(form, link);
},
// Error case:
error: function(xhr) {
MvcUtil.showErrorResponse(xhr.responseText, link);
}
});
return false;
});
也許我的疑惑是微乎其微的,取決於我缺乏的jQuery知識......
1)第一個獻疑視REQ變量在這行代碼:
beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); },
通過該行的代碼,我認爲,我加入了一個頭,以我的HTTP請求發送它朝是服務器。
我的問題是明白它指向名爲「req」的變量。我認爲這是我的HTTP請求,但我的問題是,我從來沒有宣佈過...我使用它(並且它工作正常),而沒有在之前在代碼中聲明它!爲什麼它工作?
我在想,當我使用beforeSend時,它會自動創建一個參數變量,它包含對我的函數的HTTP請求的引用......但是......終於我不知道它是否正確...
2)第二個疑問關於這些代碼行:
success: function(form) {
MvcUtil.showSuccessResponse(form, link);
},
這些代碼行處理更迭情況下(該腳本能夠追加頭添加到HTTP請求)的情況下...
閱讀JQuery的succes api文檔我哈哈我明白,成功的方法(這是一種方法?正確?)接受從服務器返回的數據作爲參數...
正如你可以在代碼中看到的,服務器返回到客戶端的文本字符串(infact我有:dataType:「文本」)...所以...爲什麼在previus代碼行中參數被命名爲「form」?
服務器返回給客戶端一個文本,而不是「表格」...我錯過了什麼?
而且在這種情況下:我還沒有創建表單變量,它是一個「通用」變量,它包含服務器返回的數據,我可以使用它,因爲在previus行我有使用Ajax調用中的JSON格式?
非常感謝您
安德烈
好的,現在已經很清楚了......但是我的疑問與世衛組織把請求引用者放在req變量裏面,並且世衛組織把服務器返回的文本字符串放在表格值中......這種行爲被處理自動通過JQuery? 非常感謝你 Andrea – AndreaNobili
是的,jQuery自動處理這些。對於'beforeSend',第一個參數是一個['jqXHR'對象](http://api.jquery.com/jQuery.ajax/#jqXHR)(XMLHttpRequest'的超集),它將用於執行ajax請求。調用它的方法(如'setRequestHeader')允許您自定義調用。關於響應,jQuery的也將其轉換爲正確的數據類型:在這種情況下,它是一個簡單的字符串,但如果它被'json'將反序列爲你(給一個JS對象作爲第一個參數),如果是'html'它將是DOM節點等。原始響應是第二個(opt)參數。 – mgibsonbr
非常感謝,現在很清楚:-) – AndreaNobili