2013-01-12 41 views
-2

我正在用ajax接收html代替body html。 问题是我复制了HEAD部分。从AJAX中删除HTML的头文件

我首先需要删除整个线路从接收到的HTML,直到再使用:

$('body').html(data); 

我得到的HTML从POST结果。 这是格式良好的html。

我正在使用Django的render_to_response发回响应。

我该怎么做到这样的事情?

+0

使用jQuery加载页面片段。阅读文档。 – epascarello

+0

请张贴更多你的代码。像你的ajax请求。检查jQuery'.load()'方法。 –

+0

扩展epapearello的评论,你不能排除'头'服务器端?这是处理这个问题的最好方法。 –

回答

-1

尝试$('body').html($(data).find('body'));。如果你有格式良好的HTML,这将工作。

编辑:这将无法正常工作;请参阅下面的Fabricio评论和我的回复为什么。一种解决方法是将您的body中的所有内容都包含在具有给定ID的div中,然后选择此ID如下:$('body').html($(data).filter('#chosenid'));当然,这与将AJAX调用组合到相同请求中的$('body').load('remote_page.html #chosenid');没有什么不同。

+0

我想不是。解析HTML字符串时,会自动排除'html' /'body' /'head'标记。http://jsfiddle.net/hqJjM/1/ –

+0

没有工作... – DjangoPy

+0

不会'$(data).find('body')'是一个对象吗? – Popnoodles

-1

您是否将文字插入到您的身体? 您应该使用load-method,但脚本:)

$("body").load("yourNextPage.html"); 
+0

是的,从服务器响应收到的html文本 – DjangoPy

0

我建议除head服务器端的提防,但我不知道该怎么你会做,在Django的,这里有一个hackish的和非常丑陋的解决方案,至少可以工作,不像其他解决方案使用$(data).find('body')永远不会匹配任何元素,因为jQuery解析会自动排除body标签旁边的htmlhead

看哪,正则表达式的威力!

$('body').html(/<body[\s\S]*?>([\s\S]*?)<\/body>/.exec(data)[1]); 

Fiddle

我不推荐使用这种生产环境发送过head只是浪费在两端带宽和正则表达式是不是最合适的解决方案。它至少应该用于开发,直到您将服务器部分页面切换到您的ajax请求。

0

这些解决方案似乎都很hacky ...严重的是,只需删除服务器端的头!

如果您使用render_to_响应,您必须传递一个模板名称进行渲染。在该模板中,不要写任何头部代码!简单地把代码放在身体标签之间,你就可以走了。

+0

仅供参考我确实建议在我的回答中删除'head'服务器端,而不是使用我发布之前发布的临时解决方案,之前称之为非常黑客并且投下它。 –

+0

我投下了它,因为这是一个非常黑客的反应,这真的不应该使用。从django中移除页面的头部很容易*因为你自己写所有的HTML!当有简单和推荐的方法来做这件事时,不应该把一个奇怪的答案当作'最好'的答案。 – Ben

+0

那好吧。如果你无法阅读我答案的最后一段,我就不会讨论。 –