如何同步嵌套的ajax调用?

时间:2011-11-08 21:03:51

标签: jquery ajax

我有

function SomeFunc() {
  $.when($.ajax()).then(FunctionWhichDoesMoreAjax());
}

现在我需要围绕这个召开另一个电话。

$.when(SomeFunc()).then(FunctionWhichDoesMoreAjax2());

我尝试修改SomeFunc()

function SomeFunc() {
  return $.when($.ajax()).then(return FunctionWhichDoesMoreAjax());
}

但是,这完全破坏了功能。 IDE报告错误

  

预期表达

返回 FunctionWhichDoesMoreAjax());

我该如何同步这些?

2 个答案:

答案 0 :(得分:3)

试试这个:

function SomeFunc() {
  return $.when($.ajax()).then(FunctionWhichDoesMoreAjax);
}

答案 1 :(得分:0)

实际上,您需要将id发送到处理Ajax请求的服务器端控制器。 对于可用性而言,一种好的方法是在所有情况下都可以使用双位数组。 第一个位置将具有请求的id,第二个位置将具有数据,例如json数据或其他任何内容。 当服务器端完成其工作时,它会将响应发送回页面,并在数组中也使用相同的模式,id,数据和完成。您可以在页面中发送异步,而不必担心会混淆请求。

function request1(){
    data=getdata;
    arrData={1,data};
    ajaxsent(controler,data,onresponse1);

}

function request2(){
    data=getdata
    arrData={2,data};
    ajaxsent(controler,data,onresponse2);
}

function request3(){
    data=getdata;
    arrData={3,data};

    ajaxsent(controler,data,onresponse3);
}

function request4(){
    data=getdata;
    arrData={4,data};
    ajaxsent(controler,data,onresponse4);
}

function onresponse1(xml){
    synchronizer(xml);
}

function onresponse2(xml){
    synchronizer(xml);
}

function onresponse3(xml){
    synchronizer(xml);
}

function onresponse4(xml){
    synchronizer(xml);
}

function synchronizer(xml){
    switch(xml.id)
    case 1: dostuff;
    case 2: dostuff;
    case 3: dostuff;
    case 4: dostuff;

}