2010-10-18 65 views
7

我想在函數中放一個ajax調用,因爲我在多個位置重複使用它。我想要一個操作版本的響應返回。這就是我想要做的事情(大大簡化了)。在函數中執行jQuery Ajax調用的問題

a = getAjax(); 
$('body').append('<div>'+a+'</div>'); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    return response; 
    }); 
} 

但是,發生了什麼是append函數在getAjax函數中定義了「a」之前運行。有什麼想法嗎?

回答

8

有兩種方法來taggle這一點。一個是使用成功回調:

$.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    AppendResponse(response); 
    }); 

另一種是設置異步爲false http://api.jquery.com/jQuery.ajax/

var a; 
getAjax(); 
$('body').append('<div>'+a+'</div>'); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    async: false, 
    success: function(response) { 
    a = response; 
    }); 
} 

重要提示在非異步:

跨域請求和數據類型:「 jsonp「請求不支持同步操作。

13

AJAX是異步的。這意味着成功處理程序中的代碼會延遲到請求成功爲止,而代碼的其餘部分會像平常一樣繼續。你需要把相關的代碼在AJAX成功處理程序:

getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    $(document.body).append('<div>'+response+'</div>'); 
    }); 
} 

請注意,我還使用原生的JavaScript document.body而不是使用標準的標籤選擇優化您的body選擇。


編輯回調版本

function getAjax(callback) { 
    $.ajax({ 
     type: 'GET', 
     url: 'someURL', 
     success: callback 
    }); 
} 

現在,您可以使用一個回調函數的代碼內嵌:

getAjax(function(response) { 
    $(document.body).append('<div>'+response+'</div>'); 
}); 

getAjax(function(response) { 
    alert(response); 
}); 

管他呢。

當AJAX請求完成時,將處理匿名函數調用中的代碼。

+0

只是編輯你的代碼,以'迴應'取代成功回調中的'a',因爲'a'沒有定義 – amurra 2010-10-18 22:34:47

+0

我可以使用它,但我並不總是希望對成功的ajax執行相同的操作響應。這就是爲什麼我想要返回響應。 – dwelch 2010-10-18 22:35:05

+0

以這種方式返回響應不是AJAX的設計目的。我已經用一種方法更新了答案,提供了一種方法來設置當您調用函數時想要發生的事情。 – lonesomeday 2010-10-18 22:42:30

1

爲什麼不在成功回調中將響應返回給另一個函數。這應該處理您的需要進行不同的反應:

getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    AppendResponse(response); 
    }); 
} 

function AppendResponse(response) { 
$('body').append('<div>'+response+'</div>'); 
} 
2

一個建議,我已經是一個觸發器傳遞到你想要AJAX已經收到了應答爲

後運行到AJAX功能,這樣它會運行命令
a = getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    inputText(response); 
    }); 
} 

inputText(someText) { 
$(document.body).append('<div>'+ someText +'</div>'); 
} 

這樣,你可以創建if語句/其他選擇繼續使用相同的AJAX命令不同的結果

+0

FWIW,您可以將其縮短爲「success:inputText」。 'inputText'是對函數的引用。不僅匿名函數可以用作回調函數! – lonesomeday 2010-10-18 22:53:08