1. 程式人生 > >如何給JQ的ajax方法中的success()傳入引數?

如何給JQ的ajax方法中的success()傳入引數?

當時在使用JQuery提供的Ajax技術的時候,我有個需求,就是要給它請求成功後呼叫的success()方法傳入引數;

所以,我就直接這樣子寫了:

<script>
function getTypeList(name){
  $.ajax({
    url : '<c:url value="admin/type_loadTypeList.action"/>',
    type : 'get',
    contentType : "text/html;charset=utf-8",
    dataType : 'json',
    success : function(data,name) {      
          alert(name);//檢視name的值
      mycallback(data,name);//
回撥函式     } }); } </script>

當時我傳入name="Java"。

當我執行後,alert(name)返回的值卻是“success”!!

怎麼回事呢?

原來success: function(data,name)是Ajax在請求成功後自動呼叫的,所以這個方法是Ajax呼叫的,那麼該方法的引數(data,name)便是Ajax提供的了。(js學的差了點,所以當時腦子沒轉過來)

其中function(data,name)的引數data是客戶端請求後臺,由後臺返回的值。

引數name這是個比較特殊的引數名,因為剛剛好在Ajax中有個引數名也叫name

,所以,Ajax就以為你是要它把它自己的引數name傳進去。該name的值卻剛好是"success";

如果你把function(data,name)的引數name改為其它的話,那麼就不會返回為"success",而是返回為空字串了。(當然還有可能你取了跟Ajax內部其它的引數名相同的名字,那麼返回便是Ajax的引數的引數值了)

==============================解決================

那麼問題來了:

給function()傳入的引數名跟Ajax的引數名相同就會返回Ajax的引數值,這不是我們想要的。

但是,你穿入的引數名跟Ajax的引數名不同,就會找不到該引數值,這也不是我們想要的;(因為這個方法是由Ajax來呼叫,如果Ajax沒有該引數,那麼該引數就為空)

那麼該怎麼辦呢?

其實,我們並不需要傳入引數,直接在把name引數傳給mybackdata(data,name),而不需要通過function()來傳遞。(此處的name引數是指getTypeList(name)中的name引數)

程式碼如下:

function getTypeList(name){
  $.ajax({
    url : '<c:url value="admin/type_loadTypeList.action"/>',
    type : 'get',
    contentType : "text/html;charset=utf-8",
    dataType : 'json',
    success : function(data) {
      mycallback(data,name);
    }
  });
}

總結:

Ajax的請求成功呼叫的方法中的引數是由Ajax負責傳遞。

本人文筆寫的不太好,希望各位大牛多多點評指點。。