将列表从php或xmlhttp.responseText传递到javascript

将列表从php或xmlhttp.responseText传递到javascript,php,javascript,arrays,list,xmlhttprequest,Php,Javascript,Arrays,List,Xmlhttprequest,我有一个javascript列表,当用户单击链接或滑动条时,该列表将根据数据库的内容进行更改。我目前使用xmlhttp请求获取生成列表的php页面。 我有一个静态列表以这种形式工作: var mark_list = [ { "EntID" : 3, "x" : 100, "y" : 400}, ]; 我试图让php页面生成{“EntID”:3,“x”:100,“y”:400},并将mark_list设置为等于responseText,但我相信这只是一个字符串。我正在努力寻找一种方法,将这个新列

我有一个javascript列表,当用户单击链接或滑动条时,该列表将根据数据库的内容进行更改。我目前使用xmlhttp请求获取生成列表的php页面。 我有一个静态列表以这种形式工作:

var mark_list = [
{ "EntID" : 3, "x" : 100, "y" : 400},
];
我试图让php页面生成{“EntID”:3,“x”:100,“y”:400},并将mark_list设置为等于responseText,但我相信这只是一个字符串。我正在努力寻找一种方法,将这个新列表放入变量中

有人有什么建议或解决方案吗?非常感谢你的帮助


Kallum

通过在此处包含JSON脚本,确保浏览器具有JSON对象:

如果可用,它将遵从本机浏览器JSON对象,如果不可用,它将添加该对象,以便在当前不支持该功能的浏览器中使用该功能

然后在代码中,在收到PHP脚本的输出后,运行以下命令:

var mark_list = JSON.parse(responseText);
根据PHP脚本的输出,您可能需要执行以下操作:

var stuff = JSON.parse(responseText);
var mark_list = [stuff];
这将把PHP返回的JSON字符串转换为实际的javascript对象

在PHP代码中,您可以执行以下操作:

$output = array(
    array(
        'EntId' => 3,
        'x' => 100,
        'y' => 400,
    ),
);

echo json_encode($output);

然后可以使用
var-mark\u list=JSON.parse(responseText)选项。

responseText
实际上只是一个由字符串表示的文本,因此,您现在输出它的方式不会完全靠自己。基本上有两种方法可以做到这一点:

  • 在javascript中,解析服务器提供的输出。这可以在一个纯字符串上以任何方式完成。例如,您可以编写javascript来解析使用大括号和基于冒号的语法给出的格式。或者,您可以使用另一种格式(如XML),这将稍微减少工作量,但仍将输出的解释留给您在javascript中完成

  • 可以输出为用于描述对象和列表的格式。JSON就是这种格式的一个很好的例子。如果您以JSON输出,您将获得类似于上面使用的格式的内容(JSON代表Javascript对象表示法,并且基于Javascript的部分语法),并且您需要做的就是使用它来获取您想要获取的数据。您可以在大多数浏览器上使用
    JSON.parse()
    ,但另一种更广泛的支持是jQuery的
    jQuery.parseJSON()
    (您可以使用jQuery,在这种情况下也应该提供jQuery)


简而言之,答案是“JSON”。请查看和,使用或针对较旧的浏览器。我已经包括了json2.js,并对您建议的代码进行了更改。我现在得到一个错误:
uncaughtsyntaxerror:Unexpected-token,
在线:
var-response1=JSON.parse(xmlhttp.responseText)响应文本是:
{“EntID”:2,“x”:0,“y”:0},{“EntID”:3,“x”:0,“y”:100},{“EntID”:5,“x”:0,“y”:200},
任何进一步的帮助都将不胜感激。哦,原来是中间的所有逗号也导致了错误(不仅仅是最后一个)。有什么解决方案吗?好的,我让php生成了整行javascript:
var mark_list=[]
然后使用:
eval(xmlhttp.responseText)
来解决我的问题。谢谢您的帮助。虽然您的解决方案可能有效,但我不建议您在服务器输出上运行
eval()
。从长远来看,解决实际问题的方法比用<代码> EVAL(<)/CODE >更有效。我已经更新了我的回复,添加了更多的信息,希望能对您有所帮助。非常感谢,没有eval()的情况下,它现在运行得非常好。