在获得响应之前等待ajax请求完成

时间:2010-09-24 18:09:38

标签: asp.net-mvc visual-studio-2008 webtest

我对mvc和webtest非常陌生,所以请在这里向我承诺。

我有一个客户视图。客户视图在document.ready上调用javascript函数。此javascript调用对客户控制器中的操作执行ajax发布,该操作将json返回到原始javascript,而javascript又更新客户视图。

在我的webtest中,我向客户视图发出请求,但是在后续的ajax调用完成并且视图更新之前返回了响应,因此我没有最新的页面内容。

有没有办法等到后续请求完成后才能分析包含所有数据的整页?或者我是朝错误的方向前进的?

这是视图:

<script type="text/javascript" language="javascript">
    //Set initial state of list during page load
    $(document).ready(function() {
        ApplyFilters();        
    })
</script>

调用此javascript:

function ApplyFilters() {
.....
$.ajax({
    type: "POST",
    url: "/Customer/FilterList",
    datatype: "html",
    beforeSend: function() {
        //do some stuff
    },
    success: function(result) {
        ...
        BindCustomrGrid($find(GridClientID), result);
    },
    error: function(req, status, error) {
       // do some stuff
    }
});
}

最后是控制器:

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult FilterList(string io, string name, string owner)
    {
        ... // some api calls
        return this.Json(new { customerList, serviceException });
    }

3 个答案:

答案 0 :(得分:1)

在这种情况下,我强烈建议TestPlan作为测试工具。它的优点是,当您在页面上查找元素时,它会自动等待它们允许JavaScript完成执行。所以,如果你做了类似的事情:

Check //button[@id='get123']

它将等到该按钮存在。显然它不会永远等待。在无显示的后端,它将检查是否有任何JavaScript正在运行,如果没有,它将立即返回,因为它不可能出现。

答案 1 :(得分:0)

返回请求时会运行succes函数。但是你在加载DOM时启动这个ajax调用。这是奇怪的,通常会在用户做某事后或在一定时间后发出一些AJAX请求。

如果你想在AJAX请求发出之前等到整个页面被加载,你可以使用:

$(window).load(function() {
  ApplyFilters();        
})

答案 2 :(得分:0)

我决定做的是发布到从ajax请求调用的url,反序列化自定义验证类中的json并在那里验证它。