检索纯文本JSON,插入JavaScript
我有一个URL检索纯文本JSON,插入JavaScript,javascript,json,url,Javascript,Json,Url,我有一个URLhttp://myapp.com/get_data返回应用程序/json内容类型。当我浏览到那个URL时,我会在浏览器窗口中得到一个纯文本JSON数组 [[key, value], [key, value], [key, value], ...] 我还有一个JavaScript函数,它希望数据采用JSON数组格式 function process_data() { var data = // give me more data in JSON array format.
http://myapp.com/get_data
返回应用程序/json
内容类型
。当我浏览到那个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()
内的data
变量中
我是JavaScript新手(来自Python背景),如果您能推荐使用核心JavaScript库的解决方案,我将不胜感激。也欢迎使用其他库的解决方案,最好是那些被认为是最佳实践的解决方案
更新
看来我的问题不清楚。让我提供一个Python示例。在完成必要的导入之后,我可以做如下事情
url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
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)
}
这一次,page\u source
已经是一个Pythonstr
对象,我可以轻松地使用它,分配给其他变量,等等。如果我可以将Python和JavaScript混合在一起,在这个问题的上下文中,我想做如下的事情
url = "http://myapp.com/get_data"
page = urllib2.urlopen(url)
page_source = page.read()
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)
}
当然,这只是一个丑陋的乱七八糟的代码,但我希望它传达了我想要表达的意思:
获取一个URL
如今,使用JQuery几乎是一种标准:
$.get('/get_data', function (data) {
//success callback
}, 'json');
我在这里拉小提琴,看看这里的样品:
-正在从以下位置获取json数据:
参考资料:
较新的浏览器本机支持JSON解析 您可以说
JSON.parse('JSON data')
。对于较旧的浏览器(如IE 7或6),您可以使用以下库:
使用上述库中的json2.js
。它检查是否存在本机浏览器实现,如果不存在,则添加它
不要使用eval
(as)
更新:要获取“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);
另外,我建议阅读本文,了解跨浏览器问题和
XMLHttpRequest
对象的实现。有两种方法。如果您使用的是某种库,大多数库都有内置的JSON.parse()方法。较新的浏览器(如Chrome、Firefox、Safari等)内置了这种功能
另一种方法是使用jsonp回调。使用此方法,您可以在脚本中定义一个函数,然后将脚本标记写入页面,加载您希望加载的url作为其源。将函数名作为参数传递给远程uri,服务器用回调函数包装json响应。当它加载到页面中时,您的函数将使用它包装为javascript对象的数据执行
这是一个简单的例子:
var your_callback = function(obj){
console.log(obj);
}
<script src="http://myapp.com/get_data/?callback=your_callback"></script>
var your_callback=函数(obj){
控制台日志(obj);
}
此时,将执行_回调,“obj”变量包含您的数据
同样,如果您有使用javascript库的优势,那么这个功能可能已经被使用了。jQuery使这一点变得非常简单
JSONP通常用于跨域数据传输,但在本地也同样有效。但是,如果您在本地执行此操作,则不需要使用JSONP,而可以使用XHR请求。如果您使用jQuery库,则可以使用jQuery JSONP库 也在你的“http://myapp.com/get_data" 页面需要将JSON数据放入回调数据中
callback(json_data_here)
那篇文章很古老。还说没那么邪恶;-)如何检索
“json数据”
,首先只给出URL?我已经更新了我的问题来解决它:)@andyb:它是邪恶的,至少约翰·雷西格这么认为:)。他使用新函数(“return”+data)
而不是$.parseJSON
中的eval@纳文,我要回敬你:-)eval有别名。不要使用函数构造函数
。我想我的观点是邪恶误导了我,我认为除非绝对必要,否则避免是一个更好的说法。但是eval函数是JavaScript最被误用的特性。避免它。我想对于没有JSON的浏览器来说,函数构造函数是更好的选择。就我个人而言,我使用json2.js:)顺便说一句,为什么我们要花大量时间来讨论IE:p您在示例中展示的所有json中,第一个不是json。这是一个数组数组。将[[key,value],[key,value],[key,value],…]复制到并检查有效性。请粘贴您的实际回复。@naveen。是的,我的示例本身就是无效的JSON<代码>键和值
都是占位符。JSONLint没有说数组数组是一个错误。它只抱怨预期的数据类型<代码>[[“键”、“值”],[“键”、“值”]]足够好了。我接受更正。我一直认为他们会被父母的反对所包围,我不会说是标准的。除了jQuery,还有很多人使用框架。我个人更喜欢Ender或MooTools。