所以我使用一个全局变量,为什么这段代码返回一个'undefined'的警告
So I went with using a global variable, why does this code come back with an alert of 'undefined'?
我想要的是从一个函数检索到的数据显示在另一个。有人告诉我,使用全局变量将允许我完成这一点。存储值以供以后的函数使用的最佳方法是什么?我听说全局变量是邪恶的。
这是我试过的。http://jsfiddle.net/8j947/17/
当我尝试将全局变量显示为警报时,它返回为未定义(在jsfiddle上可能无法查看)。我认为这是因为数据实际上并没有被存储,但我只写了3周的代码,所以我知道什么。如果你们能帮助我,告诉我哪里做错了,或者提出一个替代的解决方案,那就太好了。
底部的警报函数在getCrossDomainJson
被调用之后立即执行,并且在传递给getCrossDomainJson
的回调函数被调用之前执行。由于someProperty
属性是在回调函数中设置的,当您在警报中引用它时,它实际上还没有设置。
给你的警报函数一个名字,并在回调函数完成后在别处调用它。
function getCrossDomainJson(url, callback) {
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?callback=?",
data: {
q: 'select * from xml where url="' + url + '"',
format: "json"
},
dataType: "jsonp",
success: callback
});
}
var MyStatus = {};
getCrossDomainJson("http://xdiscgolfplanetx.channel-api.livestream-api.com/2.0/getstream", function(data) {
// data is in JSON format:
console.dir(data);
if (data && data.query && data.query.results && data.query.results.channel) {
var isLive = (data.query.results.channel.isLive);
MyStatus.someProperty = data.query.results.channel.isLive;
// alert (isLive)
if (isLive == 'true') {
alert ('working')
}
alertSomeProperty(); // now that the someProperty property has been set and MyStatus
//is global, you'll see that you can refer to it even outside of this block
}
});
function alertSomeProperty(){
alert (MyStatus.someProperty)
}
这是使用异步编程时的一个典型错误。你不能再考虑一个单一的逐步执行顺序,调用函数a(),然后b(),然后c()。当使用任何形式的ajax调用时,它通常是异步的。这意味着调用函数只是开始它的执行。
它将在后台运行,其余的javascript将继续运行并完成。然后,稍后,ajax调用将完成,它将调用它的成功函数。只有从成功函数或从成功函数调用的任何其他代码中,才能实际使用ajax调用的结果。你需要做的就是启动ajax调用然后javascript代码完成。然后编写一个成功函数,该函数将在ajax调用完成时执行需要执行的其余操作。此时,您就有了JSON数据,可以对它做任何想做的事情。你可以获取这些数据并调用其他函数,将其传递给它们,以便它们可以对其进行操作。
因此,从成功处理程序中踢出执行的第二步。无论您需要对检索到的数据做什么,都应该从成功处理程序开始。
所以,如果你想要执行的流程是这样的:
a();
b();
getJSONdata();
c();
d();
你必须这样组织它:
a();
b();
getJSONdata("xxx", function(data) {
c(data);
d();
})
function c(myData) {
// do something with the passed in data
}
其中c()和d()发生在成功函数中检索JSON数据,只有在数据可用后才调用它们。
- 获取最后一个返回值
- 使用谷歌地图:一个返回undefined的自定义javascript函数
- eval(“{}”) vs eval (“x={}”),一个返回 undefined,而另一个返回 {}
- 如何使用 jQuery 创建一个返回 SQL 结果集的函数
- JavaScriptAJAX调用一个返回XML的PHP
- 在什么情况下,您会使用一个返回另一个函数(Javascript)的函数
- 如何创建一个返回等待EventEmitter的promise的函数
- Angularjs模拟一个返回$http承诺的函数
- 如何编写一个返回单个值的java脚本函数,并将返回的值分配给我们想要的任何变量
- Jasmine-测试一个返回localStorage项的服务
- 创建一个返回函数
- 给定子域中的cookie,您可以编写一个返回代理服务器主机名的javascript函数吗
- 在Javascript中给Number添加一个返回变量
- 如何在angularjs中编写一个返回承诺的异步方法
- HTML4和HTML5 -如果没有导航,我怎么知道是否有一个“返回”状态
- 如何在JavaScript中创建一个返回本地文本文件值的函数?
- 如何声明一个javascript变量并将其值赋给一个返回布尔值的php文件
- 如何在异步测试中测试一个返回承诺的存根
- 从php传递一个返回值给js
- 输入一个返回的可观察对象