我正在尝试使用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的参数必须是数字或数组......
我该如何解决这个问题?
答案 0 :(得分:3)
data.addRows
期待一个真正的JavaScript数组,并且你传递一个字符串。为了将字符串转换为数组,您应该使用JSON解析器。但是,由于单引号,您从服务器获得的响应不是有效的JSON。
步骤:
更新您的服务器以发送有效的JSON响应,其中包括发送correct mime type application/json
。如果您使用像jQuery这样可以为您执行JSON解析的ajax库,以下标准会很有用。
使用responseText
之类的东西解析JSON.parse(...)
或使用像jQuery这样的ajax库为你做这件事。无论哪种方式,您都需要将responseText
字符串转换为真正的JavaScript数组。
答案 1 :(得分:1)
你应该可以data.addRows(JSON.parse(xmlhttp.responseText));
。但是,单引号会给你带来问题,所以你需要告诉PHP使用双引号作为键。
你可以执行类似data.addRows(JSON.parse(xmlhttp.responseText.replace(/'/, "\"")))
;`的操作,但确保PHP使用正确的引号要好得多。