我目前正在開發一個Greasemonkey腳本,使用Google翻譯API在Intranet應用中翻譯<textarea>
字段。如何在一個用戶腳本中處理多個AJAX結果?
但是有些文本太大而無法用一個請求進行翻譯。當試圖我得到這個錯誤:
請求實體太大
無論如何,我找到了一種方法來削減片段的文本,並在獨立的請求發送。在那裏變得棘手,我應該如何在原來的textareas中替換這些碎片,特別是在正確的位置。
嘗試幾種方法沒有任何成功後,我插入佔位符的文本區域,對應於有需要翻譯的文本片段:
{1}
{2}
...
但現在在我XHR的成功回調,我有用翻譯文本替換佔位符。問題是,我的XHR在for
循環中,遍歷包含原始文本片段的表格,當請求完成時,循環很長時間,我不知道如何獲得翻譯。
下面的代碼:
//Array text[] contains the fragments of original text
var translated_text = [];
var l = text.length;
for(var i = 0; i < l; i++)
{
var fullurl = apiurl+encodeURIComponent(text[i]);
GM_xmlhttpRequest({
method: 'GET',
url: fullurl,
headers:
{
'User-agent': 'Mozilla/5.0 (compatible) Greasemonkey',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function(responseDetails)
{
var destination = "{"+i+"}";
if(responseDetails.status == 200)
{
var data = $.parseJSON(responseDetails.responseText);
translated_text[i] = data.responseData.translatedText.replace(/"/g,"\"").replace(/'/g,"\"").replace(/>/g,">");
textarea.text(textarea.text().replace("{"+i+"}",translated_text[i]));
}
else
{
alert('Request Failed : '+responseDetails.status+"\nError : "+responseDetails.statusText);
}
}
});
}
PS:我不能使用jQuery的AJAX方法,因爲這是一個跨域請求,因此新$.when
功能不能被(可惜)
謝謝,它的工作! – 3rgo 2011-03-04 10:06:36
不客氣,很高興幫助! – 2011-03-04 10:11:06