我有使用ajax的代码
$.ajax({
url: '/shipments/courrier/get',
type: 'GET',
beforeSend: function (request) {
return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
},
success: function(response){
let inputOptionsPromise = new Promise(function (resolve) {
console.log(response);
setTimeout(function () {
resolve({
'#FF0000': 'Red',
'#00FF00': 'Green',
'#0000FF': 'Blue'
})
}, 2000)
})
}
});
响应已返回数据
[{id: 1, name: "DHL", link: "https://webtrack.dhlglobalmail.com/?trackingnumber=",…},…]
0 : {id: 1, name: "DHL", link: "https://webtrack.dhlglobalmail.com/?trackingnumber=",…}
1 : {id: 2, name: "LBC", link: "https://www.lbcexpress.com/track/?tracking_no=",…}
但是问题是,我不知道如何将其放在resolve()
setTimeout(function () {
resolve({
'#FF0000': 'Red',
'#00FF00': 'Green',
'#0000FF': 'Blue'
})
}, 2000)
替换此值
'#FF0000': 'Red',
'#00FF00': 'Green',
'#0000FF': 'Blue'
有人可以为此提供更好的解决方案吗?
答案 0 :(得分:1)
根据您在评论中发布的链接(SweetAlert dropdown dynamically add items in list,以供参考),您似乎想用AJAX调用的结果填充SweetAlert。由于SweetAlert支持提供Promise对象作为“ options”参数,并且由于jQuery $ .ajax()返回实现Promise接口的对象,因此您可以轻松地将这两件事结合起来:
var optionsDataPromise = $.ajax({
url: '/shipments/courrier/get',
type: 'GET',
beforeSend: function (request) {
return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
}
});
swal({
input: 'select',
inputOptions: optionsDataPromise
})
在此示例中,我们将$ .ajax返回的Promise分配给optionsDataPromise
变量,然后将该变量作为swal()
的参数提供给inputOptions
。当Promise解决时(您可能会猜到,这种情况发生在AJAX调用成功返回时),然后将根据从AJAX调用返回的数据填充选项警报。
P.S。该链接中的示例只是一个静态Promise,旨在模仿有用的Promise的行为(例如AJAX请求)。由于它总是返回相同的数据,可以直接将其放置在对象中,因此它本质上并没有实现任何有用的功能,因此它不是直接复制的构造。