如何在AJAX调用后运行javascript

时间:2009-09-29 14:16:19

标签: php javascript ajax

好的,有点前言:在AJAX和动态网络方面,我还是初学者。我的问题类似于下面的问题,但我认为讨论是使用框架,而我不是。

Potentially related post

以下是我的情景:

我在表单中有几个选择元素。每次页面加载时都会填充初始选择的选项元素。后续选择的选项元素将根据用户在上一个选择中选择的内容进行填充。所以它就像一个链条。选择中的选项通过进行AJAX函数调用(只是我自己的javascript)填充,然后调用php文件从数据库中获取值并构建responseText以根据前一个select中的选择填充每个后续选择。希望这很清楚?一切正常,花花公子。

我的问题从这里开始:

当用户提交表单时,运行php文件来处理数据,显示成功或任何问题,然后我将用户返回到表单页面。我想在提交之前重新选择他们选择的所有选项,因为其中一些是重复性任务,这将节省他们的时间。我的第一步是回忆所需的AJAX函数来重新填充select元素,然后我想我可以在表单页面中运行javascript来选择以前选择的选项。但是,当我尝试在表单页面上运行javascript来选择选项时,它在AJAX调用完成之前运行。因此,因为选项由AJAX调用填充,所以选项中尚不存在选项,因此我无法选择它们。我尝试编写一些测试代码来插入一个新选项,以查看代码运行的时间,当然,在我的AJAX填充进入之前,新选项会添加到选择中。为了跟踪是否选择了选项,我正在通过通过URL返回选择选项值,然后在表单页面中处理$ _GET数组。

所以我的问题归结为:

我能做些什么会阻止我的javascript选择运行所选的选项直到AJAX填充函数完成?

我也会接受诸如“你的整个方法都是虚假的回答!你从哪里获得AJAX编码许可证?!!一个Cracker Jack box ??”虽然,只是其中一些回答,我是一朵脆弱的花;)

提前致谢, Carvell Fenton

P.S。希望这不是太多的序言,但我认为背景是必要的。

5 个答案:

答案 0 :(得分:1)

如果您向我们展示您的代码,会有所帮助。

您是否同步进行AJAX调用?这是一种方法,但这将停止执行任何后续代码,直到调用完成。

另一种(也是更正确的,我认为)方法是异步调用,并将您想要执行的代码放在onComplete处理程序中。

答案 1 :(得分:1)

链式选择的深度是多少?我只用2级(1 ajax驱动选择)来做这个,而对于第二页加载,我会在我的jquery文件就绪函数中添加一些代码,它会启动ajax调用来加载选择列表,但也发送它的id我想要选择的字段,所以当ajax调用完成时,它将加载我的选择并设置它的必要值。

答案 2 :(得分:0)

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback< - 使用jQuery查看回调

另请查看开始\停止http://docs.jquery.com/Ajax/ajaxStart#callbackhttp://docs.jquery.com/Ajax/ajaxStop#callback - 您可以执行javascript来执行您需要的任何操作....

答案 3 :(得分:0)

答案 4 :(得分:0)

感谢所有答案! Stackoverflow的人们再一次启发了我。根据评论,我认为我有几个选择:

(1)我可以避免使用框架并在onreadystatechange事件监听器中传递更多要处理的信息(我认为这就是Jeremy Stein的建议,即使我的评论混淆了这个问题)。在这种情况下,当我动态地将选项元素添加到选择时,我只会将其中一个设置为选中。在这种情况下,我必须将选定的选项(通过URL我猜)传递给php文件,然后将php文件包含在构建的responseText中,这样我就知道在onreadystatechange监听器中选择哪个选项。

(2)我可以使用AJAX调用来封装表单帖子,永远不会离开表单页面(正如Mikeb建议的那样)。

(3)我可以添加一个为我工作的框架(CRasco,Ben Hall,OrbMan)。

我花了最后几个小时试图了解jQuery,Prototype和MooTools的优点和缺点,看看哪个更容易实现,最适合我的需求。我已经成功地获得了一个非常基本的表单页面,表现接近我想要的jQuery。它执行过程并且永远不会离开表单页面,因此我认为它是选项2和3。现在我只需要弄清楚$ .ajax调用实际上是如何工作的,以及如果需要它我可以从哪里获得responseText。我可以看一下:)

再次感谢所有人。

当有多个答案指向正确的方向时,你应该在这做什么?