使用ajax响应作为函数的参数

时间:2012-10-20 13:38:06

标签: php javascript ajax google-visualization

我正在尝试使用ajax响应作为使用谷歌图表绘制图表的函数的参数。

这是JS代码:

data.addRows([['One', 5], ['Two', 2]]);

如您所见,该参数包含几个带有“图表单位”名称及其值的方括号。一切正常。但是,当我将ajax responseText作为参数传递时,它根本不起作用。

data.addRows(xmlhttp.responseText);

PHP代码返回json_encode($ value),其中$ value变量是此字符串: [[one,5],[two,2]]

结果我得到了结果:

"[['one', 5], ['two', 2]]"

顺便说一句。我也尝试从JS代码中的字符串中删除双引号 - 仍然没有结果。

怎么了?萤火虫给了我一些奇怪的错误:给addRows的参数必须是数字或数组......

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

data.addRows期待一个真正的JavaScript数组,并且你传递一个字符串。为了将字符串转换为数组,您应该使用JSON解析器。但是,由于单引号,您从服务器获得的响应不是有效的JSON。

步骤:

  1. 更新您的服务器以发送有效的JSON响应,其中包括发送correct mime type application/json。如果您使用像jQuery这样可以为您执行JSON解析的ajax库,以下标准会很有用。

  2. 使用responseText之类的东西解析JSON.parse(...)或使用像jQuery这样的ajax库为你做这件事。无论哪种方式,您都需要将responseText字符串转换为真正的JavaScript数组。

答案 1 :(得分:1)

你应该可以data.addRows(JSON.parse(xmlhttp.responseText));。但是,单引号会给你带来问题,所以你需要告诉PHP使用双引号作为键。

可以执行类似data.addRows(JSON.parse(xmlhttp.responseText.replace(/'/, "\"")));`的操作,但确保PHP使用正确的引号要好得多。