我有一个返回 application/json
Content-Type
的 URL http://myapp.com/get_data
。当我浏览到该 URL 时,我会在浏览器窗口中得到一个纯文本 JSON 数组
[[key, value],
[key, value],
[key, value],
...]
我还有一个 JavaScript 函数,它期望数据为 JSON 数组格式
function process_data() {
var data = // give me more data in JSON array format...
}
如何让我的 JavaScript 浏览到 http://myapp.com/get_data
并将生成的 JSON 数组分配给 process_data( )
?
我是 JavaScript 的新手(具有 Python 背景),如果您能推荐使用核心 JavaScript 库的解决方案,我将不胜感激。也欢迎使用其他库的解决方案,最好是那些被认为是最佳实践的解决方案。
更新
看来我的问题并不清楚。让我提供一个来自 Python 的例子。完成必要的导入后,我可以做类似的事情
url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
这一次,page_source
已经是一个 Python str
对象,我可以很容易地使用它,分配给其他变量等等。如果我可以将 Python 和 JavaScript 混合在一起,对于这个问题的上下文,我想做类似的事情
function process_data() {
url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
var data = convert_str_to_JSON(page_source)
}
当然那只是一段丑陋的代码混搭,但我希望它传达了我想要达到的目的:
- JavaScript 将
GET
一个 URL。 - 阅读来源。
- 将源解释为 JSON。
- 将其分配给一个变量。
最佳答案
较新的浏览器原生支持 JSON 解析。
你可以说 JSON.parse('json data')
。对于较旧的浏览器(例如 IE 7 或 6),您可以使用此库:https://github.com/douglascrockford/JSON-js
使用上述库中的 json2.js
。它检查 native 浏览器实现是否存在,如果不存在,则添加它。
不要使用eval
(如eval is evil)!
更新:要获取“json 数据”,请使用:
var jsonObject = {};
var xhr = new XMLHttpRequest();
xhr.open( "GET", url, true ); // true makes this call asynchronous
xhr.onreadystatechange = function () { // need eventhandler since our call is async
if ( xhr.readyState == 4 && xhr.status == 200 ) { // check for success
jsonObject = JSON.parse( xhr.responseText );
}
};
xhr.send(null);
此外,我建议阅读此 article用于跨浏览器问题和 XMLHttpRequest
对象的实现。
关于javascript - 检索纯文本 JSON,插入到 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7055330/