2010-07-29 99 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事件处理程序的时间来完成和消防在页面上。

相关问题