【发布时间】:2016-12-01 16:10:31
【问题描述】:
我有一个对象列表,我想使用 ajax 帖子传递给部分视图的未知数量。局部视图只是一个基本表,它在每个局部视图中显示我希望的数据。我可以很好地做到这一点,问题是,我希望每个部分视图都位于单独的 div 元素中,因为我想合并拖放,我认为为此我需要知道拖放的 div id? (如果我在这里错了,请纠正我)。
这意味着我需要首先动态创建 div 并使用循环 .each() 为它们分配它们的 id 并增加 id 号。我知道我需要在这里使用 .append() 函数,它可以完美地创建 div,正确命名它们。
现在的问题是,我希望对创建的每个 div 元素的部分视图操作执行 ajax 发布请求,并且我想将 html 更改为部分视图响应。我意识到 ajax 调用是异步的,这就是为什么一开始只有最后一个 div 正在更新,所以我将所有请求放在一个数组中并使用 .when.apply().then() 来更改 div 的 html。但是我不知道要更改的 div 的 id;我想如果我可以获取数组中当前项的索引,我可以使用它,但我不知道如何获取它。
有人可以看看我的代码并告诉我是否过于复杂,或者我如何获得我需要为其设置 html 的 div 的索引?
<script type="text/javascript">
$(document).ready(function () {
var modelData = [@Html.Raw(Json.Encode(Model.mappings))][0];
var divid;
var ajaxrequests = [];
$.each(modelData, function (i, item) {
divid = 'header' + i;
$('#HeaderData').append('<div id="' + divid + '">Hello</div>');
ajaxrequests.push($.ajax({
url: "HeaderFieldMapping",
type: "POST",
data: JSON.stringify(item),
contentType: "application/json; charset=utf-8",
dataType: "html"
}));
});
$.when.apply($, ajaxrequests).then(function (resultdata) {
divid = 'header' + [index???];
$('#' + divid).html(resultdata);
});
});
</script>
编辑之前的尝试结果是它不断覆盖最后一个 div 元素
<script type="text/javascript">
function rowDropHandler(args) {
var item = args.data[0];
alert(item);
}
$(document).ready(function () {
var modelData = [@Html.Raw(Json.Encode(Model.mappings))][0];
var divid;
var ajaxrequests = [];
var intnum = 0;
$.each(modelData, function (i, item) {
divid = 'header' + i;
$('#HeaderData').append('<div id="' + divid + '">Hello</div>');
ajaxrequests.push($.ajax({
url: "HeaderFieldMapping",
type: "POST",
data: JSON.stringify(item),
contentType: "application/json; charset=utf-8",
dataType: "html",
success: function(resultdata){
$('#' + divid).html(resultdata);
}
}));
});
$.when.apply($, ajaxrequests).then(function (resultdata) {
alert('done' + resultdata);
});
});
</script>
【问题讨论】:
-
要处理单个 AJAX 请求,请在每个
$.ajax调用中添加一个success处理函数。然后,您可以为每个响应创建嵌套在div中的所需table。 -
我试过了,但没有一个 div 更新。我使用警报告诉我他们何时完成并且警报显示但没有任何 div 更改。这就是为什么我将更改 div html 的代码放在
.then()函数中。现在最后一个会改变,但其他都不会改变,因为divid是创建的最终 div 的 id。 -
您能否更新问题以显示您在这种情况下的尝试。请注意,如果您使用
.html(),那么每个后续请求都会覆盖前一个请求。append()在这种情况下会更合适。 -
我已经更新了之前的尝试@RoryMcCrossan。
-
谢谢。问题确实是因为您使用了
html()。使用$('#' + divid).append(resultdata);而不是.html()。您也可以删除$.when电话
标签: jquery ajax asp.net-mvc-5 jquery-deferred