我正在用 ajax 接收的 html 替换正文 html。问题是我复制了 HEAD 部分。
我首先需要从收到的 html 中删除整行,然后使用:
$('body').html(data);
我从 POST 获取 html。这是一个格式良好的html。
我正在使用 Django 的 render_to_response 来发回响应。
我怎样才能做到这一点?
我正在用 ajax 接收的 html 替换正文 html。问题是我复制了 HEAD 部分。
我首先需要从收到的 html 中删除整行,然后使用:
$('body').html(data);
我从 POST 获取 html。这是一个格式良好的html。
我正在使用 Django 的 render_to_response 来发回响应。
我怎样才能做到这一点?
我建议排除head
服务器端,但因为我不知道你会如何在 django 中做到这一点,所以这是一个 hackish 且极其丑陋的解决方案,至少可以工作,不像其他解决方案,$(data).find('body')
由于 jQuery,它永远不会匹配任何元素自动解析并排除标签body
旁边的标签。html
head
看哪,正则表达式的力量!
$('body').html(/<body[\s\S]*?>([\s\S]*?)<\/body>/.exec(data)[1]);
我不建议将其用于生产环境,因为发送head
只是浪费了两端的带宽,并且正则表达式不是最合适的解决方案。在您将服务器部分页面切换到 ajax 请求之前,它至少应该适用于开发。
这些解决方案看起来都非常hacky......说真的,只需移除服务器端的头部!
如果您使用的是 render_to_ 响应,则必须将模板名称传递给它以进行渲染。在那个模板中,不要写任何头代码!只需将代码放在正文标签之间,就可以了。
试试$('body').html($(data).find('body'));
。如果您有格式良好的 HTML,这将起作用。
编辑:这行不通;请参阅下面的 Fabricio 评论和我的回复以了解原因。一种解决方法是用给定的 ID 将你的所有内容包装body
在一个 div 中,然后像这样选择这个 ID:$('body').html($(data).filter('#chosenid'));
当然,这实际上与$('body').load('remote_page.html #chosenid');
将 AJAX 调用组合到同一个请求中没有什么不同。
您是否在正文中插入文本?您应该使用load-method,但要注意脚本 :)
$("body").load("yourNextPage.html");