0

PHP

echo '<data><![CDATA[ [{"x":0,"y":0,"src":"images/image.jpg"}]  ]]></data>';

JS

$.post( 'getData.php', {}, _onResult );

_onResult = function( result)
{
    console.log(result); 
}

上面的 console.log 输出:

(在本地主机上,使用 WAMP):

<data><![CDATA[ [{"x":0,"y":0,"src":"images/image.jpg/"}]  ]]></data>

(在虚拟主机上,使用 LINUX):

<data><![CDATA[ [{"/x/":0,/"y/":0,/"src/":/"images/image.jpg/"}]  ]]></data>    

在第二种情况下如何获得相同的输出?

或者

我可以以某种方式将第二个输出转换为能够用 $.parseJSON 解析它吗?

4

2 回答 2

0

你的剧本没问题。。

var xml = "<data>\
        <![CDATA[ [{\"x\":0,\"y\":0,\"src\":\"images/image.jpg\"}]  ]]>\
    </data>";
var dataXML = $.parseXML(xml);
var json = $(dataXML).find('data').text();

console.log(json); // outputs [{"x":0,"y":0,"src":"images/image.jpg"}]

这一行也没有错误

var json = JSON.parse(json);
于 2013-02-28T05:05:21.037 回答
0

问题可能与浏览器或 HTTP 服务器读取 XML 数据有关,但出于安全原因未将其自动解析为 JSON 对象。不管是什么原因,这条线(假设自动转换)失败:

 var json = $(dataXML).find('data').text();

相反,用这个改变它:

 var json = $.parseJSON($(dataXML).find('data').text()); // i think you can use $.parse() too.

这个问题之前在两个平台的各种场合都出现过几次,我认为不是一个稳定的事情。然而,由于浏览器(或 JS 解释器)无法“检测到”它实际上是一个 JSON 对象(在 XML 中),如果你想建立你的东西的类型安全,你必须明确定义它是这样的(这是一种很好的编程方法)。

PS:“localhost”在安全性方面非常灵活,所以我建议不要太依赖它:)

于 2013-02-28T06:15:20.630 回答