gpt4 book ai didi

javascript - 函数和延迟 jquery

转载 作者:行者123 更新时间:2023-11-28 01:54:14 25 4
gpt4 key购买 nike

你好,我对这个论点很困惑:我知道在 javascript 函数中执行有时采用异步方式,这是我的问题。我有一个名为

的函数
function createPopupHour() 

此函数创建一个 html select 元素,并且不返回任何内容。我在请求的成功部分的 $.AJAX 请求中调用此函数。

$.ajax({
url:"responseregistrodocente.php",
data:{
operazione:'caricaAssenza',
idAssenza:id_array[3],
codiceFiscale: id_array[0],
data:id_array[1],
tipo:id_array[2]
},
type:"POST",
dataType:"json",
success: function (jsonObject) {
createPopupHourSelect()
//other code
});

},
error: function(error){
//XMLREQQUESTOBJECT
alert(error.responseText);
location.reload();
},
cache:false,
ifModified:false
});

问题是,当我调用该函数时,其他代码没有注意到我的函数结束。我知道在jquery中有“延迟对象”,也许我需要我的函数创建一个延迟对象,并将其返回给代码。但语法是怎样的:?还是还有另一种更简单、更干燥的解决方案???

这样的事情正确吗?

function createPopupHour select(){ //staff to do
return $.deferred();//it's in pending state
}

和$.ajax

$.ajax({
url:"responseregistrodocente.php",
data:{
operazione:'caricaAssenza',
idAssenza:id_array[3],
codiceFiscale: id_array[0],
data:id_array[1],
tipo:id_array[2]
},
type:"POST",
dataType:"json",
success: function (jsonObject) {
var defered=createPopupHourSelect()
defered.then(function{//other code])
defered.resolve();
});

},
error: function(error){
//XMLREQQUESTOBJECT
alert(error.responseText);
location.reload();
},
cache:false,
ifModified:false
});

最佳答案

是的,其他代码需要驻留在一个回调函数中,该回调函数将在弹出事件完成时执行,就像在ajax完成时执行弹出启动代码一样。您可以使用原始回调,也可以使用更强大的 promise模式。

jQuery Deferred objects 的语法是

function …() {
var def = $.Deferred();
// start asynchronous task
// when the task is done (in the future), call
def.resolve(…); // optionally with results
// and right now do
return def.promise();
}
<小时/>

由于 $.ajax 也返回一个 promise ,因此您可以通过 .then 使用链接(假设 createPopUpHourSelect 属于上述模式):

$.ajax({
url:"responseregistrodocente.php",
data:{…},
type:"POST",
dataType:"json",
cache:false,
ifModified:false
})
.fail(function(error){
alert(error.responseText);
location.reload();
})
.then(createPopupHourSelect) // gets passed the parsed JSON
.then(function(result) { // gets passed the resolve arguments from the popup
// other code
});

如果您在其他代码中也需要 ajax 响应并且不想通过弹出函数传递它,请使用

.then(function(json) {
return createPopupHourSelect(…)
.then(function(popupResults) {
// other code
});
}) /* returns a promise that resolves with result of other code
.then(…) */

关于javascript - 函数和延迟 jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19357173/

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