关于ajax中async属性的值的问题

今天在写一个函数时,因为要和后台交互数据,就使用了jQuery的ajax,这里我使用的是mini UI的ajax,其实都一样。

原函数如下:

function queryAgain(){
   SLData.again = 'again';
   var json=nui.encode({params:SLData});
   var againData;
    nui.ajax({
        url: "com.vbm.fmis.gl.voucher.voucher.queryVoucherMain.biz.ext",
        type: 'POST',
        data:json,
        success: function (data) {
             againData = data.vos;
        },
        error: function (jqXHR, textStatus, errorThrown) {
            nui.alert(jqXHR.responseText);
        }
    }); 
    return againData;
}

这里仅仅就是查询获得自己需要的数据,然后要在另外一个function里用到这些数据,但是,最终的得到的数据 againData 总是undefined,确定后台已经查询出数据,一开始以为是逻辑流配置错误,再三检查,发现没有错误,始终搞不明白到底哪里出现问题,最终,在同事的帮助下,找到了原因。

原因:我们在利用ajax与后台交互时,有一个属性是async,它的值要么为true,要么为false,如果我们不写async,默认情况下,是true。async的意义在于请求是否异步或者同步,当async为true时,浏览器会执行两个线程,一个是ajax部分,另一个是

ajax后面的部分。而async为false的情况下,浏览器只有执行了ajax中的success部分,才会继续向下执行后面的操作。

导致:可以看到,我这里声明里一个变量 againData,我的本意是将后台数据赋值给 againData,然后进行返回,从而在另外一个函数那里调用这些数据。但是由于 我没有将async声明为false,浏览器会直接返回 againData,导致我return的数据总是undefined。

改为false此问题即可解决:

关于ajax中async属性的值的问题_第1张图片

以后使用ajax时一定要提前想清楚自己的想法,抓住细节才可以成功!

2019-3-4更新,一个同样的错误犯的第二遍,看这里

你可能感兴趣的:(日常开发)