将返回数据放入解析函数

时间:2018-08-07 09:46:12

标签: javascript jquery laravel

我有使用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'

有人可以为此提供更好的解决方案吗?

1 个答案:

答案 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请求)。由于它总是返回相同的数据,可以直接将其放置在对象中,因此它本质上并没有实现任何有用的功能,因此它不是直接复制的构造。