2011-10-11 52 views
1
function foobar(){ 
    $.ajaxSetup ({cache: false}); 
    var response = $.get("http://mysite.com/return.php") 
    document.write(response); 
} 

我試圖將此響應保存爲變量。我怎樣才能做到這一點?

+3

歡迎來到** async **的世界!你不能那樣做。 – SLaks

+0

對不起,如果它沒有很好地解釋,但使用async:false,它的工作原理。 – jdborg

+0

**不要使用'async:false' **!它會凍結瀏覽器。 – SLaks

回答

3

$不用彷徨是一個異步AJAX調用 - 你文件撰寫線是要執行多久,服務器甚至向您發送的響應。

如果您要訪問的返回值,你需要做一個回調,像這樣:

$.get('/return.php', function(response) { 
    document.write(response); 
}); 
+0

那麼一切都必須在那裏? – jdborg

+0

@jdborg是的,這就是異步編程的工作原理。在響應返回之前,get函數返回。 – Skilldrick

+0

我已經運行了,並沒有得到任何東西,甚至沒有JS錯誤。 – jdborg

0

$不用彷徨處理的響應提供了一個成功的()函數...

function foobar(){ 
    var response = null; 
    $.ajaxSetup ({cache: false}); 
    $.get("http://mysite.com/return.php").success(function(respText) { 
      response = respText; 
      document.write(response); 
    }); 
} 
1

你不會成爲能夠做到這一點,除非你使用$.ajaxasync選項設置爲false。否則,用於AJAX的回調將在文檔關閉寫入後執行,並且您將覆蓋整個頁面。

而是使用load異步地將強制HTML轉儲到頁面中。

+0

我不想用它加載一個頁面,我想用它來返回一個變量(mysql/glob那種東西)。 – jdborg

+0

@jdborg,'load'不加載頁面。它將HTML內容添加到頁面。 'document.write'也將HTML內容添加到頁面中;如果你只是試圖從服務器獲取一個變量,那麼你會這樣做***非常錯誤。 – zzzzBov

+0

然後請解釋一個更好的方法。 – jdborg

0

可以使用$ .load()函數這個,因爲這是它的預期目的

http://api.jquery.com/load/

從手冊:

這種方法是從獲取數據的最簡單方法服務器。它大致相當於$ .get(url,data,success),只是它是一個方法而不是全局函數,並且它有一個隱式回調函數。當檢測到成功的響應時(即,當textStatus是「成功」或「未被修改」時),.load()將匹配元素的HTML內容設置爲返回的數據。這意味着該方法的大多數用途可以非常簡單:

$('#result').load('ajax/test.html'); 
+0

我不想用它加載一個頁面,我想用它來返回一個變量(mysql/glob那種)。 – jdborg

+0

這將完成相當於您的原始文章,包括document.write位。但是,它不會將其存儲在變量中。如果你不打算寫回應頁面,那麼load()確實是不合適的,但是同樣你的OP也會誤導。 –

+0

不,我說我想保存它作爲一個變量。 – jdborg