将本机承诺转换为JQuery的承诺(适用于IE)

时间:2016-07-27 17:25:30

标签: javascript jquery promise

我目前在Javascript中严重依赖Native“Promise”对象进行AJAX调用。但是,正如https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise中提到的以及在IE11中的测试之后,Native Promises在IE中不起作用。

现在,解决方案是使用JQuery的Promises,但我无法使它工作。 请找到以下本地承诺的代码:(适用于IE以外的所有浏览器)

var getJSON = function (url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest();
        console.log(window.location);
        console.log(window.location.origin);
        xhr.open('get', url, true);
        xhr.withCredentials = true;
        xhr.responseType = 'application/json';
        xhr.onload = function () {
            var status = xhr.status;
            if (status == 200) {
                resolve(xhr.response);
            } else {
                reject(status);
            }
        };
        xhr.send();
    });
};

getJSON(url).then(function (data) {
    console.log(data);
    console.log("Success");           
}, function (status) { //error detection....
    console.log(status);
    alert('Something went wrong.');
});*/

我尝试过类似的东西,但它不起作用

 var promise = $.ajax({
    url: url,
    beforeSend: function (xhr) {
        xhr.withCredentials = true;
    }
}).done(function (data){
    console.log(data);  
});

我认为我们必须使用延迟对象但无法弄清楚!! 注意:由于缺少Node.js,无法使用PolyFill或BlueBird 感谢

1 个答案:

答案 0 :(得分:0)

var p = $.ajax({
    url: "yoururl",
    type: "GET",
    dataType: 'json',
    xhrFields: {
         withCredentials: true
    }
});
// use p.then()

注意:
jQuery直接有$.JSON()函数。
另外,如果您只是想要承诺,请查看Promise-Polyfill