gpt4 book ai didi

javascript - jQuery promise 不使用方法 html undefined

转载 作者:行者123 更新时间:2023-11-30 17:51:26 25 4
gpt4 key购买 nike

我有以下标记和脚本:

<div id="output" hidden>
<img src="ajax-loader.gif" />
</div>
<script src="Scripts/jquery.min.js"></script>
<script>
var promises = [
$.getJSON("./MyContacts.js"),
$("#output").fadeIn("slow"),
new $.Deferred(function (dfd) {
setTimeout(dfd.resolve, 5000);
return dfd.promise;
})
];

$.when(promises).then(
function (xhr, faded, timer) {
faded.html(xhr[0].length + " Contact(s) Found");
},
function (xhr, status) {
$('#output').html("Error retrieving contacts.")
}
);
</script>

运行代码时出现错误消息:

UncaughtTypeError: Cannot call method 'html' of undefined

是什么导致了这个错误?

最佳答案

$.when()不期望延迟的 Array,而是将每个延迟作为自己的参数。

由于 Array 本身不是 Deferred,因此它被视为 truthy,自动解析。而且,fadedundefined 而不是您选择的 $("#output") 因为 xhr 实际上包含所有内容.

console.log(xhr);
// Array( [jqXHR], [jQuery], [Promise] )

您需要使用 .apply()promises 传递给它:

$.when.apply($, promises).then(/* ... */);

或者,为了将来引用 (ES6),使用价差:

$.when(...promises).then(/* ... */);

另外,请注意 .fadeIn() 不会返回 Deferred 或 promise。因此,这将被视为自动解决而不是等待动画。

但是,正如 Bergi 在评论中提到的,您可以使用 .promise() methodfx 动画队列创建一个 Promise

$('#output').fadeIn('slow').promise()

关于javascript - jQuery promise 不使用方法 html undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18926531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com