我有一个asp.net mvc应用程序。我正在尝试使用ajax post更新主视图中的局部视图。这是我的javascript代码:
$.ajax({
url: "Interface/GetErrors?servers=" + serverNames,
type: "Post",
dataType: "html",
async: false,
success: function (result) {
$('#errorListDiv').html(result);
},
error: function () {
alert("Error occured");
}
});
实际上这个ajax帖子成功获得了部分视图。但我的问题是;部分视图加载后,一些css类,html属性等加载不完整。因为部分视图的某些部分是使用javascript函数排列和创建的。由于这个javascript库在主视图或viewstart中呈现,并且这些库不会使用ajax post呈现,因此我的局部视图加载不完整。我怎样才能做到这一点?
答案 0 :(得分:1)
我在评论中提到了一些方法。这是您可能需要的那个:
从原始HTML中提取任何<script>
块并使其执行。我相信html()
会删除script
块。
$.ajax({
url: "Interface/GetErrors?servers=" + serverNames,
type: "Post",
dataType: "html",
success: function (result) {
$('#errorListDiv').html(result);
var re = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
var scripts = "";
var match;
while (match = re.exec(result)) {
if (match[1] != "") {
scripts += match[0];
}
}
// cause the scripts to execute - add them to the panel loaded
$('#errorListDiv').append(scripts);
},
error: function () {
alert("Error occured");
}
});
您需要确保部分视图仅包含脚本代码块而不包含脚本文件引用,或者您可以对包含内容进行双重修改。
可能有更好的方法可以做到这一点,但这对我有用,所以我很高兴听到评论。
*注意:请不要使用async: false
。它导致任何数量的额外问题,几乎没有什么好处。只需使用提供的异步回调(无论如何)。