2012-01-19 137 views
5

此代碼將停止mousemove事件

$.ajaxSetup({async:false}); 
$.get(url).success(function(data) { result = data; }); 

有沒有辦法避免這一點,但保持$ .ajaxSetup({異步:假});,像負載功能?

感謝

加法:

要是我需要

$.ajaxSetup({async:false}); 
$.get(url).success(function(data) { result = data; }); 
$.ajaxSetup({async:true}); 
return result 

如何處理?

感謝

+2

你不需要'$ .ajaxSetup({async:false})''。 – Tomalak

+0

'async:false'停止瀏覽器,所有JavaScript,直到完成。 –

+0

@Tomalak:我確實需要異步:false,但我不想停止... –

回答

6

return意味着同步代碼流。但是,AJAX不是async: false而是異步的。這並不意味着你應該使用async: false。相反,你應該改變你的代碼流來使用回調而不是返回值。

這是必需的,因爲沒有辦法使異步代碼同步(即不能使用具有異步功能的return)。唯一的辦法是自己提供的回調,以及:

function get(url, callback) { 
    $.get(url).success(function(data) { callback(data); }); 
} 

像:

get("...", function(result) { 
    // use `result` which you normally got by assigning the return value 
    // of `get` to a variable 
}); 
5

你應該找到一種方法,做你想做的沒有設置async:false

使用您的ajax請求中的回調函數,您應該可以執行大部分操作。

+0

已添加我的問題,請檢查 –

3

async:false中止瀏覽器,所有的JavaScript,直到AJAX調用完成。這是沒有辦法的。

你應該做的是,你不應該試圖從AJAX調用中返回一個值,而應該對你的回調中的所有數據進行處理。

您可以將返回的數據保存到全局變量,但在完成之前它將不可用。