全局传递xhr onload函数的值
Pass the value of an xhr onload function globally
在我正在创建的应用程序中,我有下面的XMLHttpRequest,我正试图将xhr.onload()
中data
的结果传递到在同一父函数中创建的数组中。
var url = 'http://api.soundcloud.com/resolve.json?'+resource+'&'+CLIENT_ID;
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function(){
var data = JSON.parse(xhr.responseText);
console.log(data.permalink_url);
};
xhr.send();
下面是一个数组的构建块,我正试图将数据的结果传递到跟踪字符串中。
var metadata = {
id: val,
title: title,
url: posturl,
track: data.permalink_url
};
到目前为止,我所尝试的一切要么返回undefined
,要么返回function
,现在我完全没有想法了。。。
Ajax异步执行(通常)。这对Ajax的工作方式至关重要。这意味着,当onload
方法将触发时,您不能指望,如果将触发,甚至不能指望<em。这意味着所有依赖于xhr.responseText
(HTTP请求的结果)的代码都必须在回调本身中完成。例如:>
xhr.onload = function () {
// This will execute second
doStuffWithData(JSON.parse(xhr.responseText));
}
// This will execute first
xhr.send();
var anything = anythingElse;
正如我在上一个答案的注释中所说,您可以将其中一行更改为xhr.open('GET', url, false)
。它将使请求同步,并阻止其他一切运行,直到请求完成。它将允许您在不等待加载函数的情况下访问xhr.responseText
。
CLIENT_ID = 'client_id=xxx';
var src = track,
match = src.match(/url=([^&]*)/),
resource = match[0],
stream = decodeURIComponent(match[1]) + '/stream/?' + '&' + CLIENT_ID;
var url = 'http://api.soundcloud.com/resolve.json?' + resource + '&' + CLIENT_ID;
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send();
parsedResults.push({
title: title,
track: JSON.parse(xhr.responseText)
});
你可以在这里看到它的作用。由于某种原因,它在Chrome中似乎已损坏。不过可以在Firefox中使用。我认为这与CORS+302重定向+同步请求有关。
我选择了爆炸药丸解决方案。我遇到的唯一问题是,每次运行节点应用程序时,被爬网的链接并不总是以相同的顺序返回。现实地说,他们应该按照爬行的顺序返回(哪一个会是最新的帖子,对吧?)然而,情况并非总是如此?
相关文章:
- 在phonegap中为android调用onload函数的最佳方式
- 将函数从onclick修改为onload
- 如何调用表td标记内的Onload函数
- 不执行包含的页面的Javascript onload函数
- 你能停止window.onload函数吗
- 无法将java脚本函数与Panel'绑定;s OnLoad事件
- 使用多个JavaScript Onload函数
- body onLoad未调用动态生成的javascript函数
- 将函数分配给Reader.onload
- 如何只使用一次window.onload函数
- 在iframe中禁用onload函数的Javascript
- 调用了javascript函数onload并单击按钮
- 触发具有$this的Jquery函数.onload和onclick
- 函数onload()拒绝运行
- 切换到为窗口上的对象分配函数.Onload而不是显式加载.经历困难
- 外部JS函数onload与用户函数onload冲突
- 如何运行一个没有窗口的函数.onload包装
- 同时调用ajax函数onload和onclick
- jquery悬停函数onLoad在firefox中不起作用
- 我如何运行一个函数onload,然后从onclick事件再次调用它