jquery$.ajax使用返回数据时出现问题

jquery $.ajax problems with using the returned data

本文关键字:问题 数据 返回 ajax jquery      更新时间:2024-06-01

我试图在单击某些内容时从Controller获取数据。我得到了响应和成功,但响应数据返回了整个页面(返回的内容完全可以)。我不知道如何用返回的数据替换当前页面。当我在树中最顶部的元素上使用.html时,我会得到一个空白页面,就像返回的数据不在那里一样(但整个数据可以通过console.log(data)看到,它以开头)。如何用ajax返回的新的整页内容替换当前页面?我这样做,但它不起作用:

JavaScript:

$(document).ready(function(){
            $(document).on('click','#name',function(){  
                $.ajax({
                    url: "{{path('myPathOne',{'status' : 'ONE'})}}",
                    type: "POST",
                    cache:false,
                    data: { 'status' : status },
                    success: function(data) {
                        $(document.body).html(data);
                    }
               });
            });
        });

要替换正文,您可以执行当前正在执行的操作,但要替换整个html,您应该执行:

$("html").html(data);

编辑

另一种方法:

$("body").html($(data).find("body").html());
$("head").html($(data).find("head").html());

第2版

您也可以使用document.write(data),因为如果在页面加载后调用,它将用新的html替换旧文档。此处提供详细信息:https://developer.mozilla.org/en-US/docs/Web/API/Document/write

为什么要这样做?感觉不对。但是,无论如何。。。

您可以尝试使用:

$('body').html( your html )

如果您使用的是C# MVC,在返回可以在Razor中写入的HTML之前,请在控制器中渲染它

     protected string RenderPartialViewToString(string viewName, object model)
     {
            if (string.IsNullOrEmpty(viewName))
                viewName = ControllerContext.RouteData.GetRequiredString("action");
            ViewData.Model = model;
            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);
                return sw.GetStringBuilder().ToString();
            }
    }

用法:

    public ActionResult Index()
    {
        var model = new MyModel();
        var html = RenderPartialViewToString("SomeView", model);           
        //return
    }

您的数据是一个完整的html页面,对吗?我的意思是用<html><head>标签?如果是这样的话,您可以尝试在返回的数据中找到正文并获取它的html。然后用接收到的正文的新html内容填充当前正文。

不过,这不是一个好方法,因为您收到的数据太多了。为了更有效地做到这一点,你必须在服务器端进行更改,以便只发送回所需的数据(即只发送正文中的html内容)。

ps:我没有测试这个,但它应该有效。

$.ajax({
    url: "{{path('myPathOne',{'status' : 'ONE'})}}",
    type: 'POST',
    cache: false,
    data: {'status': status},
})
.done(function(data) {
    newbody=$(data).find('body').html();
    $('body').html(newbody);
})
.fail(function() {
    console.log("error");
})
.always(function() {
    console.log("complete");
});

尝试修改

$.ajax({
                url: "{{path('myPathOne',{'status' : 'ONE'})}}",
                type: "POST",
                cache:false,
                dataType: 'json'
                data: { 'status' : status },
                success: function(data) {
                    $(document.body).html(data);
                }
           });

然后使用它来填充数据

$(document).html(data);

document表示当前文档。希望它能有所帮助!