這是我使用YQL進行Google翻譯的一個類。jQuery ajax請求,承諾不能在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;
}
});
}
}
現在我稱它在一組元素在頁面
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);
});
這正與Firefox和Chrome沒有問題。然而,像往常一樣,Internet Explorer(我的情況是9)似乎是問題所在。從我已經能夠推斷出它駐留在諾言解析器(Translate.spitResult
) - 這被稱爲,但沒有數據似乎被傳遞給它。我在控制檯中看着它。該承諾數組元素填充了3個對象(我敢肯定是正常的),但它是:
readyState: 0
responseJSON: undefined, status: 0
statusText: "No Transfer".
我試圖消除變音符號的功能(現在我不知道是什麼原因,因爲那裏本來應該反正無論如何),我也嘗試在ajax調用cache: false
模式,但無濟於事。
有誰知道會發生什麼事?
預先感謝您。
+1爲通常情況下,Internet Explorer(我的情況下9)似乎是問題_ – Barun
請添加一個鏈接到工作代碼,所以我們可以看看,而不必自己設置一切,謝謝 –
@EmmanuelBucur所以沒有數據被傳遞給spitResult()或success()處理程序? –