jquery$.ajax使用返回数据时出现问题
jquery $.ajax problems with using the returned data
我试图在单击某些内容时从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表示当前文档。希望它能有所帮助!
- ng绑定和ng href问题.ng href未从控制器加载数据
- FancyTree JS+Backbone.JS-将数据加载到FancyTree时出现问题
- 使用createContainer将Meteor数据获取到React Native中时出现问题
- 将数据加载到使用JSON返回的表单字段时出现问题
- 加载泰坦尼克号可视化数据时出现问题
- 通过jQueryAjax一起发布Array和Form数据时出现问题
- 在firebase(web)上存储数据时出现问题
- 在javascript中使用json数据导致问题
- 访问angularjs中的数据时出现问题
- 使用 ng 模型获取数据时遇到问题
- 使用Breeze脱机数据时出现未定义的问题不是函数
- jQuery-数据提取问题(html遍历)
- 从 tinymce 文本区域检索数据时出现问题
- 将 Ajax 数据分配给全局变量时出现问题
- 数据互绑定问题:转换器只运行一次,无法绑定元素的 ID
- 嵌套异步函数未及时返回数据的问题
- 挖空和显示模块模式的数据绑定问题
- 使用大括号的 Internet Explorer 上的 AngularJS 数据绑定问题
- 使用knockout js在页面上显示数据时出现问题-数据不显示
- Html5拖拽&丢弃问题(数据集)