首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jQuery将ajax结果返回到外部变量

jQuery将ajax结果返回到外部变量
EN

Stack Overflow用户
提问于 2013-05-29 12:04:46
回答 4查看 180.4K关注 0票数 52

我在使用ajax时遇到一些问题。

如何将ajax的所有结果赋值给外部变量?

我在谷歌上找到了这段代码..

var return_first = (function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': arrange_url, 'method': method_target },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
});

但不是为我工作..

有人能说出这段代码出了什么问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-29 12:11:56

您在以下位置缺少逗号

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }

此外,如果您希望return_first保存匿名函数的结果,则需要进行函数调用:

var return_first = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
}();

注意末尾的()

票数 66
EN

Stack Overflow用户

发布于 2019-05-07 04:41:02

'async': false说它已经折旧了。我确实注意到如果我在ajax成功时运行console.log('test1');,然后在ajax函数之后用普通的js运行console.log('test2');test2test1之前打印,所以问题是ajax调用有一个小的延迟,但不会停止函数的其余部分以获得结果。变量simply还没有被设置,所以你需要延迟下一个函数。

function runPHP(){
    var input = document.getElementById("input1");
    var result = 'failed to run php';

    $.ajax({ url: '/test.php',
        type: 'POST',
        data: {action: 'test'},
        success: function(data) {
            result = data;
        }
    });

    setTimeout(function(){
        console.log(result);
    }, 1000);
}

在test.php上(以防你需要测试这个函数)

function test(){
    print 'ran php';
}

if(isset($_POST['action']) && !empty($_POST['action'])) {
    $action = htmlentities($_POST['action']);
    switch($action) {
        case 'test' : test();break;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-07 03:40:05

因此,这是在最初的问题之后很长一段时间,从技术上讲,它并不是对如何使用Ajax调用填充问题所问的外部变量的直接回答。然而,在研究和响应中发现,如果不禁用调用中的异步函数,或者陷入看起来像是回调地狱的可能性,就很难做到这一点。我的解决方案是使用Axios。使用它极大地简化了我使用异步调用获取数据的方法。

例如,如果我试图通过来自JS的调用访问PHP中的会话变量,比如用户ID,这可能会出现问题。做这样的事情..

async function getSession() {
 'use strict';
 const getSession = await axios("http:" + url + "auth/" + "getSession");
 log(getSession.data);//test
 return getSession.data;
}

它调用如下所示的PHP函数。

public function getSession() {
 $session = new SessionController();
 $session->Session();
 $sessionObj = new \stdClass();
 $sessionObj->user_id = $_SESSION["user_id"];
 echo json_encode($sessionObj);
}

要使用Axios调用此函数,请执行以下操作。

getSession().then(function (res) {
 log(res);//test
 anyVariable = res;
 anyFunction(res);//set any variable or populate another function waiting for the data
});

结果将是,在本例中是一个来自PHP的Json对象。

{"user_id":"1111111-1111-1111-1111-111111111111"}

您可以直接在Axios调用的response部分的函数中使用它,也可以设置一个变量或调用另一个函数。

Axios调用的正确语法实际上如下所示。

getSession().then(function (res) {
 log(res);//test
 anyVariable = res;
 anyFunction(res);//set any variable or populate another function waiting for the data
}).catch(function (error) {
 console.log(error);
});

用于正确的错误处理。

我希望这对任何有这些问题的人都有帮助。是的,我知道这在技术上并不是对这个问题的直接回答,但考虑到已经提供的答案,我觉得有必要提供这个替代解决方案,大大简化我在客户端和服务器端的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16805306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档