asp.net mvc4递归调用ajax

时间:2013-12-27 00:50:04

标签: jquery ajax asp.net-mvc-4 recursion

我需要调用一个动作,它返回一个带有列表和标志的模型,告诉我查询是否已完全加载,如果此标志为false,我必须再次调用该操作并将这些新结果附加到之前,依此类推,直到旗帜为真。我的ajax调用是这样的:

function load() {
   $.ajax({
      url: "/MyController/Action",
            datatype: 'json',
            contentType: "application/json",
            traditional: true,
            data: JSON.stringify({
                ...params....
            }),
            type: "POST",
            success: function (d) {
               $("#mydiv").html(d);
            },
            complete: function () {
               setTimeout(load, 2000);
            }
        });
     }

如何检查此标志(作为动作模型的一部分)????

1 个答案:

答案 0 :(得分:1)

如果您使用的是jQuery 1.10+,那么您可以使用jqXHR对象的resposeJSON属性,如

function load() {
    $.ajax({
        url: "/MyController/Action",
        datatype: 'json',
        contentType: "application/json",
        traditional: true,
        data: JSON.stringify({...params....
        }),
        type: "POST",
        success: function (d) {
            $("#mydiv").html(d);
        },
        complete: function (jqXHR) {
            if (!jqXHR.responseJSON || !jqXHR.responseJSON.flag) {
                setTimeout(load, 2000);
            }
        }
    });
}

如果不是,则需要处理成功和失败处理程序

function load() {
    $.ajax({
        url: "/MyController/Action",
        datatype: 'json',
        contentType: "application/json",
        traditional: true,
        data: JSON.stringify({...params....
        }),
        type: "POST",
        success: function (d) {
            $("#mydiv").html(d);
            if (!d.flag) {
                setTimeout(load, 2000);
            }
        },
        error: function (jqXHR) {
            setTimeout(load, 2000);
        }
    });
}