Czy jest możliwe ustawienie async: false
podczas wywoływania $.getJSON()
, aby połączenie blokowało zamiast być asynchroniczne?
Odpowiedz
trzeba wykonać połączenie przy użyciu $.ajax()
niej synchronicznie, tak:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
To będzie pasować aktualnie wykorzystuje $.getJSON()
tak:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
Znalazłem wygodną metodę $ .getJSON(), która prawie nigdy nie była przydatna i zawsze kończy się na użyciu $ .ajax(). –
Czy mogę użyć tego również do połączenia POST? – Hitesh
@hitesh tak, dodaj opcję 'type: 'POST'', aby zamienić ją w post - choć nie chcesz używać' async: false', chyba że * naprawdę * musisz - to Zablokuję interfejs użytkownika. –
Nie sądzę, że można tam ustawić tę opcję. Będziesz musiał użyć jQuery.ajax() z odpowiednimi parametrami (zasadniczo getJSON po prostu owija to połączenie w łatwiejszy interfejs API).
Obie odpowiedzi są błędne. Możesz. Trzeba zadzwonić
$.ajaxSetup({
async: false
});
przed wywołania ajax json. I możesz ustawić go na true po wywołaniu retunów (jeśli są inne zastosowania ajax na stronie, jeśli chcesz je asynchronicznie)
Dokumentacja jquery mówi inaczej. –
Czy możesz wskazać mi, żebym się rozdzielił, skoro mówi inaczej? – velja
Właśnie przeczytałem tę część dokumentacji. Oto część, która mówi o ajaxSetup: http://api.jquery.com/jQuery.ajaxSetup/ A oto opcje: http://api.jquery.com/jQuery.ajax/ Wyraźnie mówi: "async Domyślnie: true Domyślnie wszystkie żądania są wysyłane asynchronicznie (to jest domyślnie ustawione na true) Jeśli potrzebujesz synchronicznych żądań, ustaw tę opcję na false Żądania międzydomenowe i dataType:" jsonp " żądania nie obsługują operacji synchronicznej. " JSONP nie jest JSON, więc nadal uważam, że mam rację od samego początku. Piszę przykład później, gdy dostanę trochę czasu. – velja
Myślę, że oboje macie rację. Im później odpowiedź działa dobrze, ale jego jak ustawienie opcji globalnej więc trzeba wykonać następujące czynności:
$.ajaxSetup({
async: false
});
//ajax call here
$.ajaxSetup({
async: true
});
przewróceniu własne np
function syncJSON(i_url, callback) {
$.ajax({
type: "POST",
async: false,
url: i_url,
contentType: "application/json",
dataType: "json",
success: function (msg) { callback(msg) },
error: function (msg) { alert('error : ' + msg.d); }
});
}
syncJSON("/pathToYourResouce", function (msg) {
console.log(msg);
})
W moim przypadku Jay D ma rację. Muszę to dodać przed rozmową.
$.ajaxSetup({
async: false
});
W moim poprzednim kodzie, mam to:
var jsonData= (function() {
var result;
$.ajax({
type:'GET',
url:'data.txt',
dataType:'json',
async:false,
success:function(data){
result = data;
}
});
return result;
})();
alert(JSON.stringify(jsonData));
Działa znaleźć. Następnie zmienię na
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Alert jest niezdefiniowany.
Po dodaniu tych trzech linii alert ponownie wyświetli dane.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
- 1. Nie można ustawić wartości sslVerify na false
- 2. EditText.setFocusable (false); nie można ustawić na true. :/
- 3. dlaczego można sprawdzić, czy (document.addEventListener) zwraca false
- 4. Jak programowo ustawić layout_alignParentRight = "false"?
- 5. Czy istnieje wersja $ getJSON, która nie oddzwoni?
- 6. Czy można bezpiecznie ustawić validateIntegratedModeConfiguration = false, aby nadal używać identyfikatora personifikacji = true?
- 7. Jak ustawić zmienne Pythona na wartość true lub false?
- 8. Czy można ustawić program MasterType?
- 9. Czy można ustawić warunkowo nagłówki?
- 10. nodejs na asynchroniczne jednoczesnym
- 11. jQuery Ajax call - Ustaw wartość zmiennej na sukces
- 12. Jak ustawić ustawienie HttpOnly pliku cookie sesji na wartość false?
- 13. Elasticsearch: kiedy ustawić opcję omit_norms jako false
- 14. Czy Jedis obsługuje operacje asynchroniczne
- 15. $ getJSON i wydanie pętli
- 16. Jquery getJSON na zewnętrzną stronę PHP
- 17. getJSON vs. optJSON
- 18. .setAttribute ("disabled", false); zmienia atrybut edytowalny na false
- 19. Czy można ustawić domyślną wartość kolumny na NewId() serwera SQL?
- 20. Czy można ustawić FolderBrowserDialog.RootFolder na dowolną ścieżkę z łańcucha?
- 21. Czy można ustawić na stałe zmienną środowiskową z Pythona?
- 22. Czy można ustawić checkSelfPermission na minimum SDK <23?
- 23. czy można ustawić niestandardowe metadane na plikach, używając Java?
- 24. Nie można ustawić OnCheckedChangeListener na pole wyboru
- 25. Obsługa timeoutowania getJSON
- 26. Czy opcje gitconfig można ustawić warunkowo?
- 27. Czy można ustawić session.gc_maxlifetime> 65535 sekund
- 28. JQuery getJSON - ajax parseerror
- 29. Czy można ustawić szerokość elementu w procentach?
- 30. Synchroniczne Vs Asynchroniczne na iPhonie
Wystarczy umieścić swój kod w zwrotnego .... Jest powód, to jest przestarzałe - to zły pomysł – Milney
@Milney - Bardzo dziwne ... Oficjalnie _jest_ przestarzałe; w rzeczywistości jest _nie_. Jeśli byłby naprawdę przestarzały, możliwość wywołania synchronizacji wywołania AJAX lub przełącznika $ ajax.setup zostałaby pominięta w jQuery 3. W rzeczywistości wywołanie synchronizacji okazuje się czasami bardzo przydatne, na przykład po zainicjowaniu globali z Dane JSON, gdy masz inne globale, które opierają się na pierwszej partii. (Pakowanie całego procesu inicjowania w funkcję wywołania zwrotnego może być bardzo trudne w pewnych okolicznościach.) –