Ajax以相同的逻辑返回不同的输出

我正在尝试下面的代码通过AJAX返回一个数组并尝试提醒返回值,但它显示我未定义,同时获得具有相同逻辑的正确值。

这是我的HTML和JS代码:

HTML

 

JS代码(未定义)

 var getId = function () { $.ajax({ type: 'GET', url: url, dataType: 'json', contentType: "application/json", success: function (res) { objLen = res.length; var arrElems = []; for (i = 0; i < objLen; i++) { arrElems[i] = res[i].ids; } return arrElems; }, error: function (e) { return e; } }) } 

JS代码(获取正确的值)

 var getId = function(){ var nums = []; for(i=0;i<5;i++) { nums[i] = i+1; } return nums; } 

警报价值

 $('#getMI').click(function(){ var ids = getId(); alert(ids) }) 

当我直接警告输出(block_faces)时它给我正确的值,但是当我尝试返回它显示未定义时。

谁能帮助我知道我哪里出错了?

你无法从ajax回调中返回。 首先,它没有任何地方可以回归。 其次,除非它是同步的(不要这样做),否则ajax调用之后的代码可能首先执行,而你无法获得所需的值。

您必须使用成功回调来处理所有的ajax后操作,或者您可以将更多回调绑定到通过.done返回的jqXHR对象:

 var getBlockFaceId = function(){ return $.ajax({ $("#getBFI").on('click', function () { getBlockFaceId().done(function () { alert(ids); }); }); 

return关键字返回触发返回的当前函数的值。 因此,您当前正在编写的返回值将返回成功函数的值。 因此,为js定义一个全局变量并更新该值,如下所示

 var block_faces = ''; $.ajax({ type:'GET', url:url, dataType:'json', contentType: "application/json", success:function(res){ objLen = res.length; var block_faces = []; for(i=0;i 

伙计们,我想分享一下我对解决问题的看法。 为了成功调用我已经使用了async:false跟随其中一个建议,但后来我遇到了一些问题。 问题就像我无法在Safar浏览器上获得成功响应 。 在这里发布问题后,我发现使用async:false是完全错误的方法。

在这里,我正在粘贴评论和讨论的链接。

仅在Safari浏览器上获取AJAX响应中的错误

希望它能帮到你们。 谢谢。

该函数在ajax完成之前完成。 因此“异步”。

您可以在jQuery中使用该选项关闭异步。 http://api.jquery.com/jQuery.ajax/

之前曾问过这个问题。

编辑:将其与其他答案组合时,这也是正确的。

 var getBlockFaceId = function () { var result; $.ajax({ type: 'GET', url: url, dataType: 'json', async: false, contentType: "application/json", success: function (res) { objLen = res.length; var block_faces = []; for (i = 0; i < objLen; i++) { block_faces[i] = res[i].block_face_id; } result = block_faces; }, error: function (e) { result = e; } }); return result; } 

这是同步的,它使用变量来存储内部函数的结果。