jquery $ .ajax使用返回数据的问题

时间:2015-02-25 11:10:20

标签: javascript jquery ajax

我正试图在点击某些内容时从Controller获取数据。我得到了响应和成功,但响应数据返回整个页面(返回的内容完全是O.K.)。我无法弄清楚如何用返回的数据替换当前页面。当我在树中最顶层的元素上使用.html时,我得到的空白页就像返回的数据不存在(但是整个数据是通过console.log(数据)可见的,它以)开头。如何用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);
                    }
               });
            });
        });

4 个答案:

答案 0 :(得分:-1)

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

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

修改

另一种方法:

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

<强> EDIT2

您还可以使用document.write(data),因为如果在页面加载后调用,则会用新的html替换旧文档。详情请见https://developer.mozilla.org/en-US/docs/Web/API/Document/write

答案 1 :(得分:-1)

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

您可以尝试:

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

如果你正在使用C# MVC,那么在返回可以用HTML写的Razor之前,请在你的控制器中渲染它

     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
    }

答案 2 :(得分:-1)

尝试修改

$.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);

文件表示当前文件。希望它有所帮助!

答案 3 :(得分:-1)

你的数据是一个完整的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");
});