2011-06-13 109 views
4

我有一个运行throught连续5个步骤的过程,并在我的网页,我呼吁每个人的AJAX方法。jQuery的AJAX“太多递归”

的想法是运行第一个,如果一切ok了第二个,依此类推。

我的代码是:

$("#foo").click(function(){ 
    $.ajax({ 
     url: 'ajax.php', 
     async: false, 
     data: { 
      step: 1 
     }, 
     dataType: 'json', 
     type: 'GET', 
     success: walk_through(data) 
    }); 
}); 

function walk_through(data) 
{ 
    if(data.status == 'ok') 
    { 
     if(data.next_step == 'end') 
     { 
      // All steps completed 
     } 
     else 
     { 
      // Current step completed, run next one 
      $.ajax({ 
       url: 'ajax.php', 
       async: false, 
       data: { 
        step: data.next_step 
       }, 
       dataType: 'json', 
       type: 'GET', 
       success: walk_through(data) 
      }); 
     } 
    } 
    else 
    { 
     alert("Error."); 
     console.log(data); 
    } 
} 

即时得到“太多递归”错误,即使我的Ajax调用被设置为syncronous ..为什么呢?

+0

代码是否工作,尽管错误呢,还是失败?你真的*希望请求是同步的吗?如果它们是异步的,它将不会递归。 – Pointy 2011-06-13 12:41:29

+0

很显然你不曾经得到NEXT_STEP ==“端”检查什么是响应 – venimus 2011-06-13 12:44:17

+0

@Pointy:不,我不需要请求是syncronous,但我认为问题是, – Strae 2011-06-13 12:57:06

回答

9

变化

success: walk_through(data)

success: walk_through

你想要的功能walk_through是成功的处理程序,但你不希望立即调用该函数。

+0

+1好点。这是实际的问题。它会调用该方法去把中签属性的值,所以它不会就获得尽可能做任何Ajax调用的。 – Guffa 2011-06-13 12:45:45

+0

这是肯定的。通过传递'walk_through(数据)'你执行函数并传递结果作为的onSuccess方法。你需要传递方法本身。 – 2011-06-13 12:47:15

+0

这就是问题所在!谢谢! – Strae 2011-06-13 12:49:02

2

JavaScript是错在你的AJAX调用:

$.ajax({ 
    url: 'ajax.php', 
    async: false, 
    data: { 
     step: data.next_step 
    }, 
    dataType: 'json', 
    type: 'GET', 
    success: walk_through //You had walk_through(data), which makes a function call, rather than a reference to a function. 
}); 
0

你walk_through功能,​​每次调用它本身是成功的。

+0

其实它自称,即使它不是。 – Shurdoof 2011-06-13 12:45:19