2014-01-17 24 views
0

我對jQuery中的執行循環function有一個小小的懷疑。我正在嘗試使用js做一些事情,而在我的script中我有一個custom function,它叫做on click的一個按鈕。會發生的是,當我撥打function時,它會進行一些ajax調用並將結果分配給一個變量。據我所知,執行function之後statement應該execute。但是這裏發生的是function在完成執行function執行下一條語句之前調用。我的腳本任何人都可以解釋我在jQuery中的函數的執行過程

結構是:

var variable=false; 
function myfunction(e){ 
..... 
..... 
$.ajax({}); 
..... 
console.log('inside : '+variable); 
} 
$('#button').click(function(){ 
.... 
.... 
myfunction(n); 
console.log('called : '+variable); 
.... 
$.ajax({}); 
.... 
.... 
}); 

控制檯輸出:

Ajax call from the function; 
called : false 
Ajax call from called function; 
inside : true 

誰能解釋這東西....

+0

你可以發佈一個簡單的小提琴 – jacquard

+0

請添加你的AJAX代碼 – Ravi

+0

看到ajax是異步的,所以它不會等待其他進程完成。 – Jai

回答

1

這是js回調的力量!

js回調函數會處理完畢後,回調函數會在得到響應時運行!但js不會等待回調函數繼續執行,下面的函數將運行! Async是js的美麗。

所以在你的js文件中,你做了一個ajax調用。當ajax運行時,控制檯不會等到ajax完成!

,如果你想EXCUTE的AJAX功能sync,可以使在一個params {async: false},然後config控制檯會等到AJAX FUNC完成,則EXCUTE!

+0

謝謝你的回答。我知道了.. – james

2

它的確會heppen像這只是東陽您的自定義功能是一個Ajax Call不是一個正常的代碼。

阿賈克斯代表異步JavaScript和XML

所以,發生smultanelously請求處理是使用什麼阿賈克斯。

這就是原因,爲什麼即使在強制執行函數之前,下一個語句也正在執行。 (異步)

希望這有助於..

注:什麼都你把回撥AJAX功能的代碼,他們將只AJAX調用完成

+0

如何讓其他調用函數的一部分在ajax完成後執行。 – james

+0

@詹姆斯..我不能理解你在問什麼,你是什麼意思的其他部分? –

+0

謝謝你的回答。我的問題已經從經營工的答案中解決了。我只需要做'async:false'。 – james

0

後執行來電.ajax

  • 分配一個事件處理程序運行功能當接收到HTTP請求的響應
  • 發送HTTP請求

的下一行代碼立即運行該代碼行後立即函數之前$('foo').click(...);運行你通過點擊一樣的道理。

+0

只是好奇,當op點擊'button'時,爲什麼'console.log()'沒有先執行? – Jai

相關問題