2012-07-09 54 views
0

我試圖用一些函數調用返回的數據來觸發一個Ajax請求,並且據我所知,Ajax調用並沒有等待爲我的函數調用返回。等待一個函數在觸發jQuery Ajax請求之前返回一個值

我打電話給getSelectedMessages,在發出一個由getSelectedMessages返回的值的數組的Ajax請求之前,獲取可變數量的複選框的值。

getSelectedMessages看起來是這樣的:

var getSelectedMessages = function() { 
    var selected = []; 
    $('input:checkbox[name=multipleops]:checked').each(function() { 
     selected.push($(this).attr('value')); 
    }); 
return selected; 
} 

,這就是調用它看起來像這樣的Ajax請求:

$.ajax({ 
    type: "POST", 
    url: "/api/messages/", 
    data: { ids: getSelectedMessages(), folder: folder }, 
    cache: false, 
    success: function(){ location.reload() } 
}); 

我做搜索周圍一點點,所有我打開如何回覆一個電話和它的答案。

+0

瞭解這一'HTTP:// api.jquery.com/ajaxStart /',這應probaly做的工作。 – 2012-07-09 08:22:34

+1

它似乎應該可以正常工作。 'data'對象在Ajax請求之前顯然被初始化。 – VisioN 2012-07-09 08:23:06

+0

當你打電話給ajax – muthu 2012-07-09 08:23:07

回答

1

使用

beforeSend阿賈克斯

屬性嘗試

var getSelectedMessages = function() { 
    var selected = []; 
    $('input:checkbox[name=multipleops]:checked').each(function() { 
     selected.push($(this).attr('value')); 
    }); 
return selected; 
} 

$.ajax({ 
    type: "POST", 
    url: "/api/messages/", 
    beforeSend : function() { return jQuery.isEmptyObject(getSelectedMessages); } 
    data: { ids: getSelectedMessages(), folder: folder }, 
    cache: false, 
    success: function(){ location.reload() } 
}); 

參考

beforeSend
isEmptyObject

+1

正是我需要的,謝謝! – 27percent 2012-07-09 09:02:22

0

呼叫getSelectedMessages()在jquery(?)的ajax函數之外

0

該函數在發送請求之前執行。 真正的問題是getSelectedMessaged()返回一個數組。 這導致jQuery內部序列化後的undefined = undefined。 而這被$ .ajax()忽略,所以它看起來沒有在你的變量中發送,但它忽略了它們,因爲它們是未定義的。

如果你連接一個字符串與值,並讓它自己查詢字符串參數它應該工作。 我假設你想發送類似於?var [] = something & var [] = somethingelse的東西到服務器,所以它以PHP的陣列結束? 比你必須在getSelectedMessages函數中自己建立字符串。

希望它能幫助, PM5544

+0

該功能以正確的格式返回數據,我已經明確地定義一個局部變量,並具有* getSelectedMessages *設置它的值,然後傳遞到這一點Ajax請求 – 27percent 2012-07-09 09:00:55

+0

啊真的,我錯過了{:returnedValue IDS}證實了這一點。 做了一些更多的測試,它確實返回所有權。 – PM5544 2012-07-09 17:52:08

相關問題