2013-06-28 41 views
2

我有一些代码在提交表单时发送ajax请求。这是第一次提交表单(这是一个搜索模块),但只有一次。当数据返回时,我添加了一个突出显示表的效果,并且只能看到一次(数据只更改一次)。来自AJAX请求的响应仅显示一次

当我查看chrome开发工具中的响应时,可以看到它包含新搜索查询的数据,但未显示。为什么我只能显示一次结果?

JS:

$(function() { 
// Creates an ajax request upon search form submit 
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-nn-target")); 
     var $newHtml = $(data); 
     $target.replaceWith($newHtml); 
     $newHtml.effect("highlight"); 
    }); 

    // Prevent default action 
    return false; 
}; 

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

HTML:

<form method="GET" action="@Url.Action("Index", "Show")" data-nn-ajax="true" data-nn-target="#contentlist" class="form-search"> 
    <div class="input-append mysearch"> 
     <input type="search" class="span5 search-query" name="query" data-nn-autocomplete="@Url.Action("AutoComplete")" /> 
     <input type="submit" class="btn" value="Search" /> 
    </div> 
</form> 

<div id="contentlist"> 
    @Html.Partial("_Shows", Model) 
</div> 
+2

这是无效的:'action =“@ Url.Action(”Index“,”Show“)”'。转义你的引号或混合它们:'action ='@ Url.Action(“Index”,“Show”)''或'action =“@ Url.Action('Index','Show')”'。 –

+3

你正在销毁旧的'contentList'并用新的HTML代替一个全新的节点,所以你确定新的HTML包含''contentList“'ID? –

+0

与 \t \t \t \t'$尝试( '输入[类型=提交]')上( '点击',函数(){ \t \t \t \t \t ajaxFormSubmit(); \t \t \t \t})。' – softsdev

回答

4

我认为你应该使用html()代替replaceWith()方法:

$target.html($newHtml); 
+0

这解决了它!这很奇怪,因为我正在关注http://asp.net/mvc上的教程视频,他们使用了'ReplaceWith()',它工作正常。也许最近功能改变了吗? –

+0

不,这显然是本教程中的错误,或者某人做了一些测试并忘记了它 –

2

只是一个想法...尝试

$target.html(data); 

代替

$target.replaceWith($newHtml); 

通过replaceWith,实际上可能会删除您要填写您的内容股利后,第二次,它不找到div来插入内容之中。