我正试图在点击某些内容时从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);
}
});
});
});
答案 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");
});