javascript - 如何制作将从 AJAX 返回数据的 JavaScript 函数?

标签 javascript jquery

<分区>

Possible Duplicate:
How to return the response from an AJAX call from a function?

我曾尝试在 Google Chrome 的开发者控制台中进行调试,但无论如何我都无法获得我想要的结果。我想创建一个 javascript 函数,它将通过 AJAX 从外部文件返回一个值。我试过这个脚本:

var site = {
    token: function(){
        $.get('auth.php',function(data){
            return data;
        });
    }
};

...当我调用 site.token() 函数时,它应该返回从 auth.php 获取的内容。但事实并非如此。它始终是 undefined。我也试过这个:

var site = {
    token: function(){
        var token = null;
        $.get('auth.php',function(data){
            token = data;
        });
        return token;
    }
};

但还是一样。我也通过这样做找到了解决方法:

var token = $.get('auth.php',function(data){
    return data;
});
token.responseText;

有了这些代码,我现在可以得到预期的结果。但是当我已经把它放在一个函数中时:

var site = {
    token: function(){
        var token = $.get('auth.php',function(data){
            return data;
        });
        return token.responseText;
    }
};

...它又失败了。

*P.S.: I don't know maybe I'm just really stressed in programming and why I can't do it right. -_-"

最佳答案

$.post()$.ajax() 的简写,两者都是异步的(除非你做了非常糟糕的事情)。您不想在请求 php 页面期间卡住浏览器的 GUI 线程。因此 site.token() 无法回复数据。

但是,$.ajax() 确实会返回一个 promise (参见 http://www.erichynds.com/jquery/using-deferreds-in-jquery/how does jquery's promise method really work?)。本质上,它说的是“我保证我会在完成后给你回电话。”因此,您可以像这样构建类:

var site = {
    token: function(){
        var promise = $.get('auth.php',function(data){
            return data;
        });
        return promise;
    }
};

并这样调用它:

var promise = site.token();
promise.done(function (data) {
    alert('got the data');
    console.dir(data);
});

关于javascript - 如何制作将从 AJAX 返回数据的 JavaScript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417084/

相关文章:

javascript - 是否有从 iFrame 文档调用父文档中的函数的 jQuery 约定?

javascript - 使用 javascript JSON 对象动态创建表单

javascript - 如果 javascript 在第三方网站上,如何从 javascript 对 REST API 进行身份验证?

javascript - 如何验证文本输入字段的接收日期,使其从今天算起在 4 到 8 周之间?

javascript - 如何使用JavaScript复制到剪贴板?

javascript - 在输入中禁用空格,并允许后退箭头?

javascript - 如何在tinymce中的光标位置插入图像

javascript - 使用 jQuery 显示多个结果

jquery - 如何关闭 jquery contextMenu?

javascript - 将选定的 Div 限制为 5?