解决Javascript函数范围问题
|
很明显,我不理解Javascript中函数的作用域。这是最新的示例:
function riseData() {
var jsonResult;
$.ajax({
success: function(data, textStatus, jqXHR){
jsonResult = jqXHR.responseText;
alert(\"Inside: \" + jsonResult);
},
error: function (jqXHR, textStatus, errorThrown) {
$(\'#errLog\').append(\'<br>Status: \' + qXHR.statusText);
}
});
return jsonResult;
}
$(document).ready(function(){
var intervalID = setInterval(\'UTCclock()\',100);
alert(\"Outside: \" + riseData());
});
当我执行此操作时,\“ Inside \”警报将正常运行,但是\“ Outside \”警报将显示\“ undefined \”,即使riseData()显然仅在前面几行定义了。在代码的前面有一个$ .ajaxSetup,它定义了ajax调用的参数。 ajax调用成功在““ Inside \”警报中返回请求的数据。
我只是丝毫不知道如何使必要的数据(jqXHR.responseText)可用于脚本的其他部分。
谁能指出我的“针对傻瓜的Javascript范围界定”方法来解决此问题?
没有找到相关结果
已邀请:
2 个回复
杰黔轿缺
。
声明变量,3ѭ。
调用
,它安排要完成的AJAX请求,但响应将稍后发生。 由于
通常是非阻塞/异步的,,1ѭ继续并返回
。由于尚未完成AJAX请求,因此尚未分配
,因此返回默认值
。 在准备文档的处理程序中,您最终得到
。 一个事件循环发生到几毫秒后,发生这种情况: AJAX请求已完成。 jQuery将此转发到您的回调。 设置了
,但是
已经返回。 在文档准备处理程序已警告
之后,alerted1ѭ中的
会发出新数据警报。 有两个解决方案。第一种解决方案很简单,但是通常会导致更糟的用户体验。该解决方案是将“ 17”选项添加到“ 5”。这使得
阻止并冻结了浏览器。 第二种解决方案是对几乎所有内容都采用异步样式。这意味着使“ 1”接受回调并在AJAX响应处理程序中调用它。这是使用此方法转换的代码:
耐扫鹤胶鞭
jsonResult不仅应该在riseData()中可用,而且应该可以使用。但是,仍然存在确切何时填充的问题。 有关更多说明的链接: JavaScript中变量的范围是什么?