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; }
这是同步的,它使用变量来存储内部函数的结果。