|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.05.2013, 19:57 | #21 | |
Пользователь
Регистрация: 26.10.2011
Сообщений: 67
|
Цитата:
|
|
08.05.2013, 16:03 | #22 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Это даст возможность определить момент, когда уже есть что использовать. В этот момент данные можно сохранить в глобальном пространстве имён, в пространстве имён объекта и т.д.
Код, обращающийся к сохранённым данным, должен учитывать возможность того, что данных ещё нет. Либо иметь только одну точку входа, которая дёргается в обработчике success. В десктопном приложении ткнули на кнопку, появился прогресс-бар или курсор превратился в часы, приложение недоступно пока функция не вернёт управление. Если нужна асинхронность - её придётся реализовывать самому потоками, циклами или ещё как-то. В вэбе ткнули на кнопку, управление вернулось тут же, запрос идёт в фоновом режиме. Всё остальное работает как работало - меню выпадает при наведении, кнопки нажимаются, анимации анимируются... Можно использовать jQuery.ajax() с параметром async=False, тогда запрос остановит выполнение остального JS-кода (фактически "повесит" активную вкладку браузера) до тех пор, пока сервер не вернёт данные, но я категорически не советую так делать. Это противоречит принципам программирования на JS, кроме того, отмечено как устаревшая возможность и может быть удалено в следующих версиях jQuery.
пыщь
|
09.05.2013, 11:21 | #23 | |
Пользователь
Регистрация: 26.10.2011
Сообщений: 67
|
Цитата:
Код:
|
|
13.05.2013, 13:32 | #24 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Они сохраняются, но чуть позже, блин! http://jsfiddle.net/VJqtd/
пыщь
|
13.05.2013, 23:36 | #25 |
Пользователь
Регистрация: 26.10.2011
Сообщений: 67
|
Собственно я так и делала,и теперь понятно, что за пределами этой функции результата не получу.
|
14.05.2013, 08:17 | #26 |
Раздолбайских Дел
Старожил
Регистрация: 22.05.2009
Сообщений: 3,828
|
Получите, если будете сохранять последовательность действий. Переменная hg еще не определена на момент, когда используется. Значение в ней появляется после того, как приходит ответ с сервера. Если вызвать некую функцию внутри checkArgs после прихода ответа с сервера (неважно, кликом или в конце колбэка), то переменная будет иметь значение.
Alar, верни репу!
|
29.05.2013, 00:03 | #27 |
Пользователь
Регистрация: 26.10.2011
Сообщений: 67
|
Почему запрос не выполняется в EI, при нажатии на кнопку никакой реакции?
Код HTML:
<!doctype html> <html lang="ru"> <head> <title>Прогноз погоды</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> $( function() { $('#getGeocod').click( function() { var data = { lat:"51 .521435", lon:"-0.162714", format:"json" }; $.get( "http://open.mapquestapi.com/nominatim/v1/reverse.php", data, success ); } ); function success( geocodData ) { var geocod = geocodData.place_id + " страна " + geocodData.lat; alert( geocod ); } } ); </script> </head> <body> <button id="getGeocod">Геокодирование</button> </body> </html> |
29.05.2013, 20:39 | #28 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
А потому что IE<9 не поддерживает http://ru.wikipedia.org/wiki/Cross-o...source_sharing. Вот и вернулись к JSONP Доки на http://open.mapquestapi.com/nominatim/ подсказывают, что сервер умеет отдавать JSONP, для этого имя функции надо передать в параметре json_callback и заменить $.get на более настраиваемый $.ajax с соответствующим типом данных.
Код:
Когда jQuery.ajax видит dataType: 'jsonp', он прозрачно для пользователя создаёт функцию blabla12345(), потом тег <script src="http://open.mapquestapi.com/nominatim/v1/reverse.php?....">, а mapquestapi возвращает не JSON, а функцию blabla12345(<JSON а качестве параметра>). Старый IE не умеет принимать данные с других доменов, но может грузить скрипты откуда угодно, такой вот красивый хак. Код:
пыщь
|
30.05.2013, 23:33 | #29 |
Пользователь
Регистрация: 26.10.2011
Сообщений: 67
|
А почему не выполняются несколько запросов в цикле? это как то связано с заданием имени jsonp, говорит, что объект не вызывается с таким именем
Код HTML:
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Прогноз погоды</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> var a = new Array(); var b = new Array(); function sdr(a,b,callback) { var jsonpCallbackName = "tyts"; var data = { lat: a, lon: b, format: "json", json_callback: jsonpCallbackName }; $.ajax({ url: 'http://open.mapquestapi.com/nominatim/v1/reverse.php', type: 'get', dataType: 'jsonp', jsonpCallback: jsonpCallbackName, data: data, success: success }); function success(geocodData) { var geocod = geocodData.display_name; var geocod1 = geocodData.address.state; callback(geocod,geocod1); // alert(geocod); } }; function log(s,s1){ alert(s+s1);}; function ty(){ a [0] =58.19745; b [0] =57.10400000000004; a [1] =50.19745; b [1] =57.10400000000004; a [2] =73.19745; b [2] =30.10400000000004; for(var i=0; i<=2; i++){ sdr(a[i],b[i],function(s,s1){ log(s,s1);})} }; </script> </head> <body> <button id="getGeocod" onclick="ty()">Геокодирование</button> </body> </html> |
30.05.2013, 23:41 | #30 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
а зачем тут цикл?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
КАК ПЕРЕДЕЛАТЬ ФОРМАТ mp4 В ФОРМАТ 3gp,MPEG4 | kamalruslan | Софт | 4 | 20.08.2015 16:16 |
C++ JSON | qip2005 | Visual C++ | 2 | 05.11.2012 19:48 |
Qt + Json | Lindemann66 | Qt и кроссплатформенное программирование С/С++ | 0 | 18.08.2011 15:26 |
Json парсер | Carbon | Общие вопросы по Java, Java SE, Kotlin | 3 | 02.06.2011 22:59 |
JSON и C++Builder | s2dent | Общие вопросы C/C++ | 0 | 15.06.2010 14:46 |