вот мой код до сих пор (это с помощью GWT):метод GWT возвращает до того RequestBuilder Ajax вызова завершает
private ArrayList<tObjects> getSuggestions(String query)
{
// Clear previous suggestions
Window.alert("Clearing arraylist");
arrayList.clear();
query = query.toUpperCase().replace(" ", "");
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "xmlfile.php?query="+query);
rb.setHeader("Content-Type", "application/x-www-form-urlencoded");
try
{
rb.sendRequest(null, new RequestCallback()
{
@Override
public void onResponseReceived(com.google.gwt.http.client.Request request, com.google.gwt.http.client.Response response)
{
Window.alert(response.getText());
// Do a lot of data processing here.
Window.alert("Adding to arraylist");
addToArrayList(data);
}
}
@Override
public void onError(com.google.gwt.http.client.Request request, Throwable exception)
{
// TODO Auto-generated method stub
}
});
}
catch(RequestException e)
{
Window.alert(e.toString());
}
Window.alert("Returning arraylist. "+arrayList.toString());
return arrayList;
}
я получаю ответ правильно, но метод возвращает (пустой) ArrayList перед добавлением. Если я удалю arrayList.clear(), на следующем ajax-вызове я вижу результат предыдущего вызова. Когда я смотрю предупреждения, огонь в следующем порядке:
1) «Очистка списка элементов массива».
2) «Возвращение массива».
3) Alert с правильным ответом с AJAX
4) «Добавление к ArrayList»
Похоже, что этот метод не дожидаясь Аякса завершить до возвращения и заканчивая метод. Как я могу заставить его дождаться заполнения массива ajax & массива, прежде чем я получу оператор return?
Спасибо!