Javascript-从其他地方调用的函数返回一个值
Javascript - return a value from a function called elsewhere
这个问题的标题不是很清楚,但如果不提供一些代码,我就无法解释我在问什么。
我正在制作一个使用AJAX提交报告(数组)的页面。我在一个库中存储了一些函数,这些函数将数组提交到PHP页面,如下所示:
function saveReport(params)
{
var url="reports/save.php";
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
{
return false;
}
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,true);
//Send the proper header information along with the request
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", params.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(params);
}
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
if (xmlHttp.responseText == 'complete')
{
return true;
}
else
{
return false;
}
}
}
(我认为GetXmlHttpObject()函数与问题无关)
我希望能够像这个一样从我的页面调用saveReport()
success = saveReport(params);
if (success == true)
{
alert('success');
}
else
{
alert('failure');
}
因此,函数saveReport()需要返回一个值,该值是在调用函数stateChanged()时从该函数返回的,这样调用saveReport(。有办法做到这一点吗?
我意识到这可能是不可能的,但我能做些什么来达到同样的效果吗。
您推出自己的Ajax助手有什么原因吗?
在这种情况下,您需要在服务器响应时触发一个回调函数,以便您可以对响应执行某些操作,无论是成功还是失败。
显然,您可以使用类似jQuery.ajax的东西,但对于如此简单的东西来说,这可能有些过头了。
您可以在http://microjs.com/#ajax实现你追求的目标。
您将无法这样做,因为请求不会阻塞(它是异步的)。您要做的是使用回调,就像将stateChanged()
设置为xmlHttp.onreadystatechange
的回调函数一样。
您可以创建一个处理结果的新函数,并从stateChanged()
调用它,传递true
或false
作为其参数以指示成功。
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
saveReportFinished(xmlHttp.responseText == 'complete');
}
else{
saveReportFinished(false);
}
}
function saveReportFinished(success) {
if (success == true)
{
alert('success');
}
else
{
alert('failure');
}
}
从技术上讲,你可以把所有这些组合成stateChanged()
,但我认为这样更干净。
这里似乎有几个问题:
1) 异步操作会导致函数返回出现问题,因为函数将在异步响应返回之前完成激发。2) 一个函数只会返回你告诉它的结果,所以要让一个函数返回另一个函数的结果,你需要做这样的事情:return stateChanged( args )
1)的解决方案是使用回调,如下所示:
function saveReport( params, callback ){
...
xmlHttp.onreadystatechange = function(){
stateChanged( callback );
};
在stateChanged()内运行回调。。。
function stateChanged( callback ){
...
callback( true );
...
callback( false );
然后像这样传递回调:
saveReport( params, function( boolean ){
if( boolean )
alert('success');
else
alert('failure');
};
你试过吗
success = saveReport(stateChanged());
if (success == true) {
alert('success');
} else {
alert('failure');
}
- 使用返回函数sinde.attr()jquery元素
- 从自执行函数返回函数的Javascript性能命中率
- Node Express Handlebars帮助程序未返回函数的结果
- 未在Firefox中执行PageMethod的返回函数
- 对返回函数的函数感到困惑
- 从承诺返回不返回函数会导致警告
- 从函数返回函数而不调用返回的函数
- Javascript,闭包中的返回函数如何与外部函数连接
- 为什么Coderbyte.com's的Javascript模板喜欢返回函数的原始参数
- 对象函数返回函数而不是值
- 从外部函数(数组)了解返回函数(x)
- 从Javascript类对象返回函数
- 调用Typescript setter don't返回函数,尽管关联的getter可以工作
- 使用依赖注入在 JavaScript 中返回函数
- 通过单击JSP和javascript加载两个返回函数
- 需要说明:无法理解返回函数的javascript
- 简单的onClick返回函数不起作用
- 为什么这个闭包返回函数
- JS函数返回函数供以后使用-未定义参数
- Coffeescription类中的方法返回函数而不是字符串