我使用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<\/div>"}</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<\/div>","0":64}</div>
答案 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()函数中使用正确的编码。
答案 3 :(得分:0)
如果您只发送$content
,那么为什么要使用数组呢?
试试这个
$json = json_encode($content);