【问题标题】:Getting Ordered Responses from AJAX Request从 AJAX 请求中获取有序响应
【发布时间】:2016-01-08 18:33:09
【问题描述】:

在此代码中,我在 for 循环中将单个单词发送到谷歌翻译,并尝试将来自谷歌翻译 API 的翻译响应与原始单词配对。不过,我在做的过程中来学习异步和同步的区别!

现在的问题是要以某种方式继续利用异步 AJAX 调用的效率,但要以某种方式以我将它们发送到谷歌翻译的原始顺序捕获翻译。

    for (word in original_text) {

    $.ajax({
        type: "GET",
        url: "https://www.googleapis.com/language/translate/v2?",
        data: {key: my_Key, source: "en", target: "es", q: original_text[word]},
        dataType: 'json',
        success: function (result, status, xhr) {
            translated.push(result.data.translations[0].translatedText);
            alert(translated);
            if (translated.length === original_text.length) {
                var merged = {};
                for (word in original_text) {
                    merged[original_text[word]] = translated[word];
                }

                dfrd.resolve(JSON.stringify(merged));
            }
        },
        error: function (xhr, status, errorMsg) {
            alert(xhr.status + "::" + xhr.statusText + "::" + xhr.responseText);
        }

    });

【问题讨论】:

标签: javascript jquery ajax asynchronous google-translate


【解决方案1】:

基本上,Promises.all() 可以让你做这样的事情:

var promises = [];
for(var i = 0; i < 5; i++){
promises.push($.ajax("SomeURL"));
}
 Promise.all(promises).then(function(datas){
  for(var y = 0; y < datas.length; y++){
    var data = datas[y]; //Your data in correct order   
  }
});

您可以根据自己的情况进行调整。主要思想 - 收集到一个数组,然后 - 使用 promise.all

【讨论】:

  • 太棒了,谢谢!给我一点时间,让我在promise.all上变得聪明,这样我就可以消化这一切。
  • @Lance 如果我的回答有帮助,请将其设置为解决方案。祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 2021-02-07
  • 2011-04-27
  • 2016-07-31
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多