2012-05-26 99 views
1

我需要做很多JQUERY AJAX調用,但我不想不斷重複AJAX調用代碼。JQUERY AJAX調用 - 變量函數

function ajaxCall(ajaxData) { 
    $.post('scripts/ajax/connect.ajax.php', { 
     ajaxData 
    }, function(ajaxReturn) { 
     if (ajaxReturn == 'deadSession') { 
      location.reload(); 
     } else { 
      return ajaxReturn; 
     } 
    }); 
}​ 

但是上面的代碼並沒有因爲AJAX調用{} ajaxData變量的工作:所以我如下試圖建立一個AJAX功能。下面的代碼不工作:

function ajaxCall(ajaxData) { 
    $.post('scripts/ajax/connect.ajax.php', { 
     'googleMetaSave': '1' 
    }, function(ajaxReturn) { 
     if (ajaxReturn == 'deadSession') { 
      location.reload(); 
     } else { 
      return ajaxReturn; 
     } 
    }); 
}​ 

是否有關於我如何可以使用Ajax調用一個變量,是按照要求,然後傳遞給這個函數設置的任何建議。

+0

注意的是,AJAX'success'函數的返回值被忽略,所以沒有通過服務宗旨您的'返回ajaxReturn;' –

回答

0

jQuery POST方法第二個參數有望成爲既代表一系列的鍵/值對,通過&分開的字符串,或者它必須是包含一個地圖一系列關鍵值對。

由於JavaScript的鬆散類型本質,這不會對您的函數產生巨大影響。

由於變量ajaxData表示傳遞給服務器的對象,所以不需要額外的{},因爲如果傳遞一個對象,這是多餘的,而如果傳遞一個字符串,則語法不正確。

首先,讓我們用回調函數中的邏輯來解決問題。由於AJAX是異步的,你的函數在回調函數觸發前已經完成了它的執行。相反,您的return ajaxReturn語句向回調函數本身返回一個值,這意味着數據無處可用。

爲了將數據傳送到可以處理的地方,您的回調必須將該數據作爲切換傳遞給另一個函數。我修改了你的代碼,刪除了不必要的,不正確的{ }圍繞ajaxReturn參數,以及消除了返回語句。

function ajaxCall(ajaxData) { 
    $.post('scripts/ajax/connect.ajax.php', 
     ajaxData /* you don't need {} here */ 
    , function(ajaxReturn) { 
     if (ajaxReturn == 'deadSession') { 
      location.reload(); 
     } else { 
      // return ajaxReturn; 

      // hand the data off to a processing function 
      processData(ajaxReturn); 
     } 
    }); 
}​ 

function processData(data) { 
    // do stuff with the data here 
} 

要調用你的功能,使成功後調用,這是有益的,看看如何創建表示參數字符串/對象的例子:

// put the data in an object. {} are needed here. 
var myData = { 'googleMetaSave' : '1' }; 

// make a call to fire the ajax post request 
ajaxCall(myData); 
// execution stops here, as your callback will handoff the response 
// to your processData function. 

或者,而不是JavaScript對象,你可以代表POST數據,如下所示:

// represent data as a query string instead of object 
var myData = 'googleMetaSave=1'; 

// send the data to the post function. 
ajaxCall(myData); 
0

除去{}周圍ajaxData:

function ajaxCall(ajaxData) { 
    $.post('scripts/ajax/connect.ajax.php', ajaxData, function(ajaxReturn) {if(ajaxReturn == 'deadSession') {location.reload();}else{return ajaxReturn;}});   

}