2011-02-17 38 views
1

所以我有一个JavaScript方法,用户选择某些复选框后运行。此方法使一个AJAX调用呈现“标题”视图,然后对每个选定的复选框进行AJAX调用,然后再附加这些视图。需要这些AJAX调用发生在前一个完成后

问题是,当我通过JQuery循环检查框并为它们中的每一个进行AJAX调用时,它只是按照正确的顺序依次创建一堆AJAX调用,但是它们会得到取决于每个人花费多长时间在不同的时间呈现。我想这是AJAX的美妙之处,但我需要它按照我称之为这个特定任务的顺序进行渲染。

这里是方法:

function GenerateTermSheet() 
{ 
    var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/RenderPartialTermSheetView")%>"; 
    var jsonNickname = 
    { 
     id : GetGUIDValue(), 
     viewName : 'Nickname' 
    } 
    $.ajax({ 
     type: "POST", 
     url: urlString, 
     data: jsonNickname, 
     success: function(data) { 
      $('#termSheetPrinted').append(data); 
     } 
    }); 
    $('#termSheetPopup input[type="checkbox"]:checked').each(function(){ 
     var checkedName = $(this).attr("name"); 
     var json = 
     { 
      id : GetGUIDValue(), 
      viewName : checkedName 
     } 
     $.ajax({ 
      type: "POST", 
      url: urlString, 
      data: json, 
      success: function(data) { 
       $('#termSheetPrinted').append(data); 
      } 
     }); 
    }) 
    $('#termSheetPopup').dialog('close'); 
    $('#termSheetPrinted').dialog('open'); 
} 

知道我能做到这一点?谢谢!

+0

为什么要做一堆AJAX调用?为什么不在一个AJAX调用中发送数据并在服务器端处理呢?如果你一个接一个地发生,那么用户不需要输入,所以你可以达到同样的效果。 – JasCav 2011-02-17 15:27:08

+0

因此,在Guid中发送一个AJAX呼叫以及所有选中名称的列表?唯一的是,我的控制器方法返回视图,然后JQuery将返回的视图附加到div。我如何从一个控制器动作中一次返回一堆视图? – slandau 2011-02-17 15:30:41

回答

0

我建议将第二个AJAX调用放入一个必须首先完成的调用的成功函数中调用的函数中。这将导致第二次调用只有在第一次调用成功时才会执行,并且将实现您正在寻找的目标。

相关问题