无法从ajax响应

时间:2018-03-29 12:51:36

标签: javascript jquery ajax safari spinner

我正在使用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(本地和服务器)中它正常工作。

请帮我解决这个问题。

提前致谢。

3 个答案:

答案 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();