在Textextjs中使用带有标记的自动完成中使用ajax调用

时间:2015-07-16 14:30:48

标签: javascript jquery ajax autocomplete jquery-textext

我使用 Textextjs service control handler
在上面的例子中, list 是一个简单的json数组 我想从ajax函数中获取它的价值。

在这种情况下,ajax调用执行得很晚。所以预期的结果是令人不安的。 看看下面的代码

$('#textarea')
.textext({
    plugins : 'tags autocomplete'
})
.bind('getSuggestions', function(e, data)
{
    console.log(1);
    search_text = (data ? data.query : '') || '';
    var urll = 'url_to_get_result';

    // call ajax function
    var suggestionss = getSuggestions(search_text, urll);

    console.log(4);
    $("#output1").val();
    var list = suggestionss,

    textext = $(e.target).textext()[0],
    query = (data ? data.query : '') || '';

    $(this).trigger(
        'setSuggestions',
        { result : textext.itemManager().filter(list, query) }
    );
});

function getSuggestions(search_text, urll)
{
    console.log(2);
    $.ajax({
        'url': urll,
        'data': {'wt':'json'},
        type: 'GET',
        'success': function(data) {
            jsonObj = [];
            var count = data.count.length;
            for(i=0; i<count; i++)
            {
                var name = data.name.docs[i].term_suggest_ngram;
                autosuggestitem = {}
                autosuggestitem = '"'+name+'"';
                jsonObj.push(autosuggestitem);
            }
            var result = JSON.stringify(jsonObj);
            availableSearch = JSON.parse(result);
            console.log(3);
            $("#output1").val(availableSearch);
        },
        'dataType' : 'jsonp',
        'jsonp': 'json.wrf'
    });
    var return_val = $("#output1").val();
    return return_val;
}

请参阅控制台语句,这些语句按顺序执行 1 - 2 - 4 - 3
预期的行为应该是
1 - 2 - 3 - 4

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

异步就是答案。 $('#textarea') .textext({ plugins : 'tags autocomplete' }) .bind('getSuggestions', function(e, data) { console.log(1); ...... var self = $(this); // <--- store a reference of this getSuggestions(search_text, urll).done(function(){ // <--- .done() method of the returned ajax is invoked console.log(3); console.log(4); ..... textext = $(e.target).textext()[0], query = (data ? data.query : '') || ''; self.trigger( // <---- stored reference 'setSuggestions', { result : textext.itemManager().filter(list, query) } ); }); }); function getSuggestions(search_text, urll) { console.log(2); return ajax({ // <---- notice that ajax is returned here }); } 之后的代码不等待getSuggestions方法完成。所以那些行应该进入ajax的.done()或.success()方法

myJSON