Hier ist eine Klasse, die ich gemacht, die YQL verwendet, um Google Translate zu tun.jQuery ajax Anfrage mit Versprechen funktioniert nicht in IE9
var Translator = {
source: 'ro', // default
target: 'en', // default
url: 'http://query.yahooapis.com/v1/public/yql?q=select * from google.translate where q="',
urlRemaining: '";&format=json&diagnostics=true&env=store://datatables.org/alltableswithkeys&callback=',
diacritics: Array(),
newCharacters: Array(),
replaceAll: function(string, replace, replaceWith) {
return string.replace(new RegExp(replace, 'g'), replaceWith);
},
replaceDiacritics: function(text) {
string = text;
// diacritics and newCharacters should be arrays of the same length
// diacritics should only be specified in lowercase - uppercased version will be assumed
// durring the process
for (i = 0; i < this.diacritics.length; i++) {
string = this.replaceAll(string, this.diacritics[i], this.newCharacters[i]);
string = this.replaceAll(string, this.diacritics[i].toUpperCase(), this.newCharacters[i].toUpperCase());
}
return string;
},
translate: function(text, target, source) {
target = target || this.target;
source = source || this.source;
return $.ajax({
url: this.url + encodeURIComponent(this.replaceDiacritics(text)) + '" and source="' + source + '" and target="' + target + this.urlRemaining,
dataType: 'json',
cache: false
});
},
spitResult: function(x, container) {
x.success(function(realData) {
$report = realData.query.results.json.sentences;
$result = '';
if ($.isArray($report)) {
for (i = 0; i < $report.length; i++) {
$result += $report[i].trans;
}
} else {
$result = $report.trans;
}
if (container instanceof jQuery) {
container.html($result);
} else {
container.innerHTML = $result;
}
});
}
}
Und jetzt bin ich es auf eine Reihe von Elementen in der Seite
promises = Array();
Translator.diacritics = Array('ă', 'â', 'î', 'ș', 'ț');
Translator.newCharacters = Array('a', 'a', 'i', 's', 't');
$('.translate').each(function() {
$this = $(this);
promises[promises.length] = Translator.translate($this.html(), 'en', 'ro');
Translator.spitResult(promises[promises.length-1], $this);
});
Dies funktioniert kein Problem mit Firefox und Chrome aufrufen. Wie auch immer, Internet Explorer (9 in meinem Fall) scheint das Problem zu sein. Von dem, was ich abgeleitet haben konnte, befindet es sich in der Promise Resolver (Translate.spitResult
) - die aufgerufen wird, aber keine Daten scheinen an sie weitergegeben werden. Ich schaute es in der Konsole an. Das Versprechen Array-Element wird mit 3 Objekten gefüllt (was ich bin sicher, normal ist), aber es ist:
readyState: 0
responseJSON: undefined, status: 0
statusText: "No Transfer".
Ich versuchte, die diakritische Funktion zu entfernen (jetzt bin ich nicht ganz sicher, warum, denn es hätte sein sollen, eine Antwort sowieso), versuchte ich auch cache: false
Modus auf dem Ajax Anruf, aber ohne Erfolg.
Weiß jemand, was könnte los sein?
Vielen Dank im Voraus.
+1 für _as üblich, Internet Explorer (9 in meinem Fall) scheint das Problem zu sein_ – Barun
fügen Sie bitte einen Link zu den Arbeitscode, damit wir einen Blick haben, ohne alles selbst einrichten müssen, danke –
@EmmanuelBucur so nein Daten werden an den spitResult() - oder den success() -Handler übergeben? –