我使用 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
有人可以帮助我吗?
答案 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