我正在使用ajax调用并以HTML格式获取响应。
我只想从响应HTML中检索正文部分并将其附加到正文部分。
我尝试下面的ajax调用:
$("#formID").on("submit", function (event) {
event.preventDefault();
var url = $(this).attr("action");
var formData = $(this).serialize();
$.ajax({
url: url,
type: 'POST',
data: formData,
async: true
}).done(function(response, status){
$('body').html(jQuery(response).find('body').html());
}).fail(function(jqXHR, stat, error) {
console.log(stat + ": " + error);
});
});
HTML,我想要追加检索到的HTML。
<body>
<div id="wrapper">
//Content
</div>
</body>
我的主要动机是在脚本再次加载并冻结自定义css微调器/加载器时从接收到的HTML中排除脚本部分。
只有在我将它连接到Safari中的服务器时才会冻结自定义css微调器/加载器,在chrome(本地和服务器)中它正常工作。
请帮我解决这个问题。
提前致谢。
答案 0 :(得分:2)
如果您从 JSON 获取全部内容,那么只需填充您的身体
// YourContent是一个包含内容的变量
$('#wrapper').html(YourContent);
如果不只是将其附加在html中
$(YourContent).AppendTo('#wrapper');
答案 1 :(得分:0)
首先,我认为这是一个糟糕的后端实现,而不是前端问题。无论如何,在使用你的响应之前,请看一下jQuery.parseHTML()函数:https://api.jquery.com/jquery.parsehtml/默认情况下它会省略HTML响应中的脚本,除非你另有说明。
另一件事:也许你不希望整个身体被取代,只有包装div的内容。然后使用:
$('#wrapper').html(<content goes here>);
编辑:(这里是代码):
$.ajax({
url: url,
type: 'POST',
data: formData,
async: true
}).done(function(response, status){
var html = $.parseHTML(response);
$('body').html($(html).find('body').text());
}).fail(function(jqXHR, stat, error) {
console.log(stat + ": " + error);
});
编辑2(应该根据我给你的评论中的答案链接工作):
$.ajax({
url: url,
type: 'POST',
data: formData,
async: true
}).done(function(response, status){
var body = '<div id="body-mock">' + response.replace(/^[\s\S]*<body.*?>|<\/body>[\s\S]*$/ig, '') + '</div>';
$('body').html($(body).html());
}).fail(function(jqXHR, stat, error) {
console.log(stat + ": " + error);
});
答案 2 :(得分:-1)
创建一个新窗口完全附加你的html
var MainWindow = window.open('', '', 'height=1,width=1');
MainWindow.document.write(append your response here);
然后创建一个全局变量temptext并将其附加到原始主体并关闭窗口
var temptext= $(MainWindow).find("body");
$("#wrapper").html(temptext);
MainWindow.document.close();