[英]javascript function return not working
我在函数中返回变量时遇到问题,下面的脚本运行正常:
function sessionStatus(){
$(document).ready(function(){
$.getJSON(scriptRoot+"sessionStatus.php",function(status){
alert(status);
});
});
}
sessionStatus();
在我尝试以下操作时打赌我会收到一个消息框,其中包含“未定义”消息:
function sessionStatus(){
$(document).ready(function(){
$.getJSON(scriptRoot+"sessionStatus.php",function(status){
return status;
});
});
}
alert(sessionStatus());
这真是让我烦恼,我似乎无法看出我做错了什么。
你应该知道两件事:
1:JSON事物是异步的,因此在仍然获取JSON时,已经可以完成对sessionStatus的函数调用。 以下将有效:
function sessionStatus(callback){
$(document).ready(function(){
$.getJSON(scriptRoot + "sessionStatus.php", function(status){
callback(status);
});
});
}
sessionStatus(function(s){alert(s);});
更确切地说:
function sessionStatus(callback){
$(document).ready(function(){
$.getJSON(scriptRoot + "sessionStatus.php", callback);
});
}
sessionStatus(function(s){alert(s);});
2:即使它是同步的,你只是从内部函数给出一个返回值,所以sessionStatus什么都不返回。 看看这段代码(与你的JSON事物无关):
function do() {
var x = 0;
(function(){
x = 2;
})();
return x;
}
要么:
function do() {
var x = (function(){
return 2;
})();
return x;
}
两者都返回2.希望这可以解释一下。
您的函数sessionStatus()
不返回任何内容,因此警报显示undefined
。
一旦页面加载,所有函数都会为AJAX调用设置 - 在 sessionStatus()
中实际上不会发生任何可以返回的事件。
function(status) { ...}
中的代码在AJAX对服务器的调用返回值之前不会运行,并且在页面加载之前不会发送该AJAX调用。
你应该阅读$.getJSON()
和$(document).ready()
实际上做了什么,因为在你正确理解它们之前,你将继续得到令人困惑的行为。
您的sessionStatus()函数永远不会返回任何内容。 它设置一个稍后运行的函数, 该函数返回一些东西,但这与sessionStatus()没有任何关系
文档就绪事件完成后,您将返回一个值。 你应该去哪里? jQuery对象不知道如何处理它。
函数sessionStatus只为$(document).ready()设置事件监听器,然后返回而不返回值。 这是你看到的未定义。
稍后当$(document).ready()触发时,它会调用ajax,如果成功则返回状态,但没有任何东西正在接收该状态。
function sessionStatusCallback(status)
{
alert(status);
}
function sessionStatus(){
$(document).ready(function(){
$.getJSON(scriptRoot+"sessionStatus.php",function(status){
sessionStatusCallback(status);
});
});
}
sessionStatus();
您的函数是异步调用的 - 实际上是在通过.ready()和.getJSON()进行两次异步调用之后。 在这种情况下,没有可用的返回值,而是必须使用回调(如上所述)来处理响应。
虽然我应该注意到上面传递给getJSON的函数已经是一个回调。 您可以将该函数定义更改为“sessionStatusCallback”,并且一旦JSON准备好就会调用上面的回调,并且您可以继续在那里处理。 或者......在当前回调中继续处理(无论是使用函数引用还是在.getJSON()调用中声明匿名函数,都是样式问题)
函数永远不应该包含在jQuery(document).ready函数中。 将它们分开,这样就不会产生你不想要的副作用。 你想如何调用会话状态? 而女巫的功能应该得到回报值?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.