Jquery不是像它应该加载部分视图

时间:2017-11-01 17:20:26

标签: javascript jquery asp.net-mvc

我在mvc中加载部分视图时遇到问题。我试图用jquery加载视图,它有点工作。它显示两个填充正确信息的div或四个填充相同的信息。但它循环遍历数组,因此参数变化,我得到一个警告。

  

自上一步以来,流程或线程已发生变化

我在jquery中有一个数组,里面有四个值,我需要该列表中的值作为ActionResult中的参数。

我的代码

public ActionResult TvShow(string channel)
    {
        var model = un.SortAllPrograms(channel);
        return PartialView("TvShow", model);
    }

和jquery

$(document).ready(function () {
var nameOfChannel = ["TV3", "TV4", "TV6", "TV8"];
debugger
$.each(nameOfChannel, function (index, value) {
    $('.showContainer').append('<div class="number">' + value + '</div>');
    $('.number').load('Home/TvShow', { channel: value });
});

});

我非常感谢有关如何使这项工作的一些帮助或建议。

1 个答案:

答案 0 :(得分:0)

问题是,对于每个ajax调用,您正在使用类number加载ajx调用对div的响应。因此,获取最后一个响应的ajax调用将用于更新所有具有该css类的div 。这就是你看到多个具有相同响应的div的原因,但这也是随机的,因为每次你的服务器每次呼叫都需要不同的时间来响应。有时候,TV6的呼叫将是需要更多时间的呼叫。由于ajax是异步的,当响应返回时,会更新当时具有类number的所有可用div 。你的循环可能正在执行它的第二次迭代,所以你只有2个div存在于那个css类中,因此它只会更新那两个div。

理想情况下,您希望加载为您正在循环的数组中为特定字符创建的div。

这应该这样做。

$(function() {

    var nameOfChannel = ["TV3", "TV4", "TV6", "TV8"];

    $.each(nameOfChannel, function (index, value) {
        var $d = $("<div class='number'>")
                                      .load('@Url.Action("TvShow")',{ channel: value });
        $('.showContainer').append($d);
    });


});

请记住,您当前的方法是对服务器进行n次调用(其中n是数组的大小)。您可以考虑将数组作为参数发送并进行单个调用,该调用可以返回所有项目的标记,从而产生一次调用。使用对您的用例更有意义的方法。