通过JSON从PHP发送HTML到javascript

时间:2012-12-08 11:57:53

标签: php javascript jquery json

我使用jquery_form插件将html表单发送到php。然后php发送回JSON对象。

这是PHP发回的内容

$content="<div>ABC</div>";
$json = json_encode(array("content" => $content));
...Here I also send $json to Mysql database...
echo $json;

然后我提醒回复Javascript。

现在在Mysql中我收到{"content":"<div>ABC</div>"}看起来正确

但是在Javascript警报中看起来像{"content":"<div>ABC&lt;\/div&gt;"}</div>

这使得jQuery.parseJSON解析此对象成为问题。

请帮我将正常的JSON传递给javascript。

更新

我在这里测试了php文件http://codepad.viper-7.com/EBSM8G 把这个代码放在那里

<?php
   $content="<div>ABC</div>";
   $json = json_encode(array("content" => ".$content."));
   echo $json;

,结果就像这样

{"content":".

ABC<\/div>."}

那么问题是什么?我很困惑:(

更新2 尝试建议提示将一行更改为此

$json = json_encode(array("content" => $content,JSON_UNESCAPED_SLASHES));

警报给了我{"content":"<div>ABC&lt;\/div&gt;","0":64}</div>

4 个答案:

答案 0 :(得分:1)

HTML

你不会看到开头的div标签,因为它已经被你的浏览器解析了(它就在那里,但你没有看到它 - 检查来源)。 你确实看到了结束标记(没有额外的标志)斜杠被转义并且它没有被解析为关闭div标签。 您的浏览器可能会立即关闭div标签,从而为您提供换行符(div是一个块元素)。

JS

Javascript工作得非常好 http://codepad.viper-7.com/inVZmv

此外,您不需要解析字符串,因为当您在JavaScript中使用它时它已经是JSON(除了您在它周围添加引号)。请考虑以下示例:http://codepad.viper-7.com/SK5KaK

答案 1 :(得分:1)

这对你现在可能没什么帮助,但是我会重新考虑通过json发送html,在我看来,如果你要发送一大块页面,这样一个简单的div包装器就会变得非常混乱。

我要在页面上使用php重新加载直接在页面上构建HTML,或者如果你使用的是ajax,那么只需发送构建内容客户端所需的变量,这种松散耦合的方法将更加灵活

一个更具体的例子是棘手的,因为你的原始帖子非常抽象和简洁,但如果你的表单是名字和年龄,我会发送json对象,如

{'name':'codemonkey', 'age':21}

并使用JS在jQuery中填充类似

的HTML
$('.theName').val( jsonData.name )

答案 2 :(得分:0)

也许您可以尝试在header()函数中使用正确的编码。

这样的事情: http://codepad.viper-7.com/zZxzBd

答案 3 :(得分:0)

如果您只发送$content,那么为什么要使用数组呢?

试试这个

   $json = json_encode($content);