我在现有功能中添加了一些功能。我需要在当前例程的中间插入一个额外的步骤。我知道如何进入第二个功能但我不知道在第二个例程完成后如何返回主函数。
function step1(){
perform ajax call to see if student is assigned to a project
step1_subfunction()
// wait here until step1_subfunction is done
do some more stuff with response from user
}
function step1_subfunction(){
prompt user via jQuery dialog, 'Add or move employee to the project?'
// return to step1 with answer returned from user and resume
}
我这是谷歌,但我不知道这个"过程"有一个名字。回到我的COBOL时代,我们称之为gosub。
更新: Step1 执行ajax调用以查看是否已将员工分配到项目。如果response.status =' Assigned', 将通过jQuery对话框询问用户,"您是否要将员工复制或移动到此项目? &#34 ;. jQuery对话框将是step1_subroutine。答案将传递回step1函数。 step1的其余部分只是将值放在" copy"的隐藏文本字段中。或"移动"。
答案 0 :(得分:0)
你写的东西应该有效--javascript是单线程的,所以你试过吗?
Javascript没有专门的子程序,只需创建一个返回并忽略结果的函数,就像你所做的那样。当第二个例程完成时,范围和执行将在第一个函数中继续。
答案 1 :(得分:0)
什么都不做。
你想要实现的只是一个“函数调用”
所以一旦执行它就会自动返回到它的调用者“堆栈帧”。
答案 2 :(得分:0)
你所拥有的将执行你所描述的内容,但是如果没有函数step1_subfunction()中的返回,则可能无法使用户的数据可用于step1()。下面我修改了你的示例代码,以演示值的传递。
function step1(){
//do some stuff
var returnValFromFunction = step1_subfunction();
// wait here until step1_subfunction is done
// Now use returnValFromFunction, it contains the information from the user
do some more stuff with response from user
}
function step1_subfunction(){
prompt user for some information
// return to step1 with information returned from user and resume
return userResponse;
}
答案 3 :(得分:0)
您可以使ajax对象同步 - IE,在获得响应之前,代码不会继续。这是open的第三个参数(true是异步,false是同步)。
xmlhttpobject.open('POST', 'url', false);
有些情况下同步调用很好,但如果可能的话应该始终避免。
另一种替代方案,可能需要对代码进行一些逻辑更改,但从长远来看会更好,就是绑定onReadyStateChange事件。每次xmlHttpRequest对象的状态发生变化时都会触发 - 您可以检查状态是否为200且readystate是否为4,以确保请求完成并成功完成。
Here's更好的参考。祝你好运。