构建Ajax调用数组时,JQueryAjax成功回调不起作用
JQuery Ajax success callback not work when building array of Ajax calls
我需要通过解析基于另一个数组构建的promise数组来构建一个对象数组。
假设我有一个letters = ['a', 'b', 'c']
数组。然后,我映射它,使用每个字母作为参数进行Ajax调用,如下所示:
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter });
};
结果,我得到了一个带有ajax promise的数组。然后我这样解决:
Promise.all(result).then(function (response) {
console.log(response);
});
日志正在打印每个ajax调用的原始响应。在那之前一切都很好。但我不想要原始的响应,我想要自定义对象,所以我尝试使用Ajax的成功回调来创建它们,比如:
var letters = ['a', 'b', 'c'];
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter })
// Chaining with success callback
.done(function (response) {
return {
'custom_attr': response.x,
'athor_custom_attr': response.y
};
});
});
Promise.all(result).then(function (response) {
console.log(response);
});
问题是成功回调不会干扰数组的创建。事实上,我可以在回调中将返回更改为ANYTHING,这没有任何区别,代码仍然返回原始响应的数组。
当我使用$http
服务使用Angular时,它运行得很好,但使用$.getJSON
的JQuery不起作用,我不明白为什么会发生这种情况。
提前谢谢大家。
您的回调返回值被忽略,因为您使用了done
。您实际想要的是使用then
,它为回调的结果创建了一个新的承诺:
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter })
.then(function (response) {
return {
'custom_attr': response.x,
'athor_custom_attr': response.y
};
});
});
done
方法不可链接几乎没有理由在then
上使用它。
正如我在评论中提到的,我认为您只需要将每个jqXHR的响应数据映射到您想要的自定义对象。
所以类似于:
Promise.all(result).then(function (response) {
result = response.map(function(c) {
return {
'custom_attr': c.x,
'another_custom_attr': c.y
};
});
});
这是假设var result;
是在此处可访问的范围中声明的。
这是一个完整的样本:
<!-- index.html -->
<button class="load-ajax">Click To Make our AJAX calls!</button>
<script src="jquery.min.js"></script>
<script>
// Declare `result` in global scope.
var result;
$(document).ready(function() {
$('.load-ajax').on('click', function(e) {
e.preventDefault();
var letters = ['a', 'b', 'c'];
result = letters.map(function (letter) {
return $.getJSON('json.php', { param: letter });
});
Promise.all(result).then(function (response) {
result = response.map(function(c) {
return { "custom_attr" : c.param };
});
console.log("DONE! Look at `result`");
});
});
});
</script>
以及示例json.php
文件:
<?php
// json.php
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, max-age=0, must-revalidate');
header('Content-Type: application/json');
echo json_encode($_GET);
?>
因此,在一天结束时,result
等于:
[
{custom_attr: "a"},
{custom_attr: "b"},
{custom_attr: "c"}
]
相关文章:
- 尽管链接成功并已成功下载,但未找到NPM模块
- 在另一个函数成功结束后调用该函数
- 在ajax成功后,cluetip不适用于首次点击活动元素
- jQuery成功函数中的ajax成功函数
- jQuery触发器点击未从AJAX成功工作
- 如何在jQueryAJAX中修改成功块内的freemarker变量值
- 构建Ajax调用数组时,JQueryAjax成功回调不起作用
- 如何成功处理jqueryajax请求
- 如何从jQueryajax成功函数返回一个数组并在循环中使用它
- jQueryAJAX-基于PHP页面数据的有条件成功结果
- jQueryAjax成功回调未启动,也未返回错误
- 如何检查jQueryAJAX请求的成功结果,并在插入内容之前中止jQuery.load()
- 对未引用对象的jQueryajax成功回调会发生什么
- JQueryAjax JSON错误报告$.ajaxpost成功
- JQueryAjax成功后弹出窗口不会打开
- jqueryajax进程成功,然后继续加载html代码
- 使用jQueryAjax成功显示脚本
- jQueryajax调用永远不会结束(成功和错误回调不会触发)
- jQueryajax成功页面中的搜索框-循环中的问题
- jQueryAjax:当函数事先未知时,在成功时重新执行函数