jQuery-如何将变量拆分为两个不同的ajax请求,然后使用成功数据

时间:2014-08-10 19:05:02

标签: jquery

我正在制作ajax请求并使用成功数据。问题是接收请求的URL一次只能使用一个单词。因此,如果发送的查询包含空格,则会中断。

如何检查传入的查询,并为每个单词发送单独的ajax请求(如果它包含多个单词),然后使用两者的数据?

function get_syn(query) {

var words = query.split(' ',2); // this is how I'm splitting it up. 2 words max

jQuery.each(words, function(index, item) { // I'm using each to loop through the words

    $.ajax({ 
        type: 'GET',
        url: 'http://www.example.com?query='+item, 

        success: function (data) {

           // do some stuff with the results...

        } // end success function

    }); // end ajax

}); // end for each words

// outside of the each loop, I can not access the data

} // end function

问题是我需要同时使用两个单词中的数据。我弄清楚如何做到这一点的唯一方法是使用async,但有另一种方式:

    $.ajax({ 
        type: 'GET',
        async: false,
        url: 'http://www.example.com?query='+item, 

        success: function (data) {

            var json = $.parseJSON(data);

            if (index == 0) { // first word
                firstword_data = json.data['array'];
            } else { // if second word (there will only be a max of 2)
                secondword_data = json.data['array'];

                testfx(firstword_data);
            } // end if second index

        } // end success function

    }); // end ajax

}); // end for each words

alert(firstword_data); // this works

} // end function

1 个答案:

答案 0 :(得分:1)

由于JavaScript中的函数是first class objects,因此您可以在实际处理数据的函数中累积各个AJAX调用的结果。例如,您可以尝试:

function get_syn(query) {

    var words = query.split(' '); // Split the query, now works with more than 2 words

    function doStuff(result_index, data) {
        doStuff.results[result_index] = data;
        doStuff.num_results++;
        if(doStuff.num_results == doStuff.num_query_items) {
            results = doStuff.results.join(" ");
            // process the data from all words
        }
    }
    doStuff.results = [];
    doStuff.num_results = 0;
    doStuff.num_query_items = words.length;

    jQuery.each(words, function(index, item) { // I'm using each to loop through the words

        $.ajax({ 
            type: 'GET',
            url: 'http://www.example.com?query='+item, 

            success: function (data) {
                doStuff(index, data);
            } // end success function

        }); // end ajax

    }); // end for each words

    // outside of the each loop, I can not access the data

} // end function

请注意,doStuff函数包含的结果数组每次调用get_syn时都会“重置”。此外,此方法保留结果中实际查询元素的顺序,因此即使第一个单词由于某种原因需要更长时间返回,它仍然作为doStuff.results中的第一个元素输入。