为什么以下Jquery Ajax Call只执行一次?

时间:2017-12-27 15:09:49

标签: jquery ajax asp.net-mvc

我的ASP.NET MVC项目中有以下脚本:

$(function () {

var ajaxFormSubmit = function () {
    var $form = $(this);

    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var $target = $($form.attr("data-otf-target"));
        var $newHtml = $(data);
        $target.replaceWith($newHtml);
    });

    return false;
};

$("form[data-otf-ajax='true']").submit(ajaxFormSubmit);
});

为什么这个功能只执行一次?这个函数用于更新对象列表,这里是剃刀视图上的表单:

<form  method="get" action="@Url.Action("Index")" data-otf-ajax ="true" 
data-otf-target="#RestaurantList">
<input type="search" name="searchTerm" />
<input type="submit" value="Search By Name" />
</form>

<div id="RestaurantList">
@Html.Partial("_Restaurants")
</div>

1 个答案:

答案 0 :(得分:1)

您的功能只执行一次。问题是,当您的处理程序第一次执行时,您将使用ajax调用返回的HTML代码替换id为RestaurantList的元素。

所以,下次执行时,这一行

var $target = $($form.attr("data-otf-target"));

不会产生预期的行为(因为文档中不存在标识为RestaurantList的元素。

尝试使用.html()方法而不是replaceWith()更新RestaurantList元素的内容:

$.ajax(options).done(function (data) {
        var $target = $($form.attr("data-otf-target"));
        var $newHtml = $(data);
        $target.html($newHtml);
    });

这样,您的元素仍具有相同的ID。下一次执行你的处理程序应该可以正常工作。