2010-07-29 98 views
0

我有一個函數返回另一個函數返回一個布爾值,在這個我做驗證,這是導致不尋常的行爲。

函數中的代碼如下:

$.post("classes/InsertCustomer.php", 
    { iResult: theResult.valid }, 
    function(data) 
    { 
    alert(data); 
    }); 
return true; 

當這個運行時,發生後,但不返回任何東西。 但是,當最後一行是「返回false」時,該帖子完美執行並返回PHP文件中的數據。根本沒有改變PHP代碼,只是在JavaScript中返回true和false。

這是否有任何明智的理由?

+0

你能展示更多的JavaScript嗎? – Nalum 2010-07-29 15:48:46

+0

首先,當你說「不會返回任何東西」時,你的意思是alert()顯示一個空盒子......或者根本不顯示該提示......?其次,您是否意識到包含警報的函數(傳遞給$ .post的回調函數)將在包含它的函數已經返回並且其調用者完成執行後執行?我問,因爲這是一個非常常見的錯誤... – Shog9 2010-07-29 15:53:04

回答

1

返回值用於阻止事件的默認操作。例如,如果您在鏈接或表單的提交過程中調用此JS函數,則return true將指示鏈接或表單元素繼續執行要求的默認操作(例如,在鏈接href或將要形成action)。很大的機會,你的是去同一頁,從而基本刷新頁面。做return false會阻止這一點,你停留在同一頁面。

在不顯眼的JS你經常喜歡return false當你通過異步(ajaxical)動作代替同步動作。對於優雅的降級,你應該注意,當JS被禁用時(例如功能returns true),當前情況顯然不是這樣。在您的瀏覽器中禁用JS並重新測試。在這種情況下,你想讓所有的東西都可以工作。

+0

該死的,你打了我10分鐘。所以通知我新的答案真的很慢。 ;-)我必須給你+1,因爲你基本上和我說的一樣。 :) – Chris 2010-07-29 16:03:46

0

這是正在上的onsubmit運行,試圖讓它做的,而不是一個「真正的」一個一個Ajax表單提交?您的「返回true」不是$ .post的一部分,因此可能會告訴它所在的任何事件處理程序以繼續其默認操作。

如果這是一個表單提交,則上面會導致表格提交到這可能是本身的默認位置。這可能會導致它重新加載頁面,導致等待.post響應的事件處理程序丟失。

當你將它設置爲返回false就是告訴頁面不執行默認操作(提交),所以它會留給後compelte事件處理程序的時間來完成和消防在頁面上。

相關問題