2016-07-27 13 views
1

Ich bin derzeit stark abhängig von Native "Promise" -Objekt in Javascript für AJAX Calls. Aber, wie in https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise erwähnt und nach meinem Test in IE11, funktionieren Native Promises nicht in IE.Konvertierung von Native Promise zu JQuery's Promise (für IE)

Jetzt ist die Lösung JQuerys Versprechen zu verwenden, aber ich kann es nicht funktionieren. finden Sie den Code unten für Native Versprechen :(Funktioniert in allen Browsern außer 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.'); 
});*/ 

ich so etwas wie dies versucht, aber es hat nicht funktioniert

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

Ich denke, wir müssen verwenden das verzögerte Objekt, aber nicht in der Lage, es herauszufinden! Hinweis: Kann verwenden PolyFill oder Drossel nicht wegen des Mangels an Node.js Dank

+0

['$ .getJSON()'] (http://api.jquery.com/jquery.getJSON/) – Andreas

+0

Nicht. Sie werden nicht glücklich mit jQuery sein. Verwenden Sie stattdessen ein geeignetes Polyfill. – Bergi

+0

Wenn Sie viel Code für native Versprechungen geschrieben haben, wäre es viel einfacher, ein Polyfill für native Versprechungen zu erhalten. jQuery-Versprechen (mindestens vor 3.0) sind sowohl in der Syntax als auch im Verhalten sehr unüblich. Ein einfacher Polyfill oder ein verbesserter Polyfill wie Bluebird wird für Sie funktionieren, ohne dass Sie Ihren bestehenden Code ändern müssen. – jfriend00

Antwort

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

Hinweis:
jQuery hat eine $.JSON() Funktion direkt.
Schauen Sie auch Promise-Polyfill, wenn Sie nur Versprechungen wollen!