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

Moh*_*ril 32 variables ajax jquery

我使用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;
});
Run Code Online (Sandbox Code Playgroud)

但不适合我..

任何人都能说出该代码有什么问题吗?

Igo*_*gor 49

你丢失了一个逗号

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }
Run Code Online (Sandbox Code Playgroud)

此外,如果要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;
}();
Run Code Online (Sandbox Code Playgroud)

最后请注意().

  • ajax调用async中的@Ohgodwhy设置为false,因此实际上可以正常工作. (7认同)
  • 问题是变量永远不会被设置,因为调用是异步的... (2认同)
  • @kneidels使用回调,请参阅Zahra Ghaed的答案 (2认同)

jos*_*aly 31

这就是你需要做的一切:

var myVariable;

$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "ajax.php?first",
    'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
    'success': function (data) {
        myVariable = data;
    }
});
Run Code Online (Sandbox Code Playgroud)

注意:已使用"async"已弃用.请参阅https://xhr.spec.whatwg.org/.

  • async:false解决了我的问题.没有它,我无法将其存储到变量中. (4认同)
  • @tim_stuff嗯,我想当它是异步时,代码将继续,而不会收到服务器的响应.这意味着你在变量被调用而不在那里.在进行同步时,代码只有在收到服务器的响应后才会继续. (2认同)

小智 22

使用'async':false来防止异步代码是一种不好的做法,

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用.https://xhr.spec.whatwg.org/

在表面上设置async to false修复了很多问题,因为正如其他答案所示,您将数据转换为变量.但是,在等待post数据返回时(由于数据库调用,连接速度慢等等,在某些情况下可能需要几秒钟),其余的Javascript功能(如触发事件,Javascript处理按钮,JQuery转换(如当响应处于挂起状态时,手风琴或自动完成(JQuery UI)将无法发生(如果响应永远不会回来,那么你的网站现在基本上已被冻结,这真的很糟糕).

试试这个,

var return_first;
function callback(response) {
  return_first = response;
  //use return_first variable here
}

$.ajax({
  'type': "POST",
  'global': false,
  'dataType': 'html',
  'url': "ajax.php?first",
  'data': { 'request': "", 'target': arrange_url, 'method': method_target },
  'success': function(data){
       callback(data);
  },
});
Run Code Online (Sandbox Code Playgroud)