LINUX.ORG.RU

jquery, вернуть значение из .post


0

1

jquery 2.0.3:

$.post(«xxx_web.pl», {
operation: «search», id: 99},
function (json) {console.log(json.length());},«json»);

Как присвоить внешней переменной значение (вывести наружу из $.post) значение json.length() ? В документации описаны манипуляции только с DOM внутри обрабатывающй функции.

★★

Последнее исправление: WinLin2 (всего исправлений: 4)

У тебя неправильная постановка вопроса.

могу предложить несколько вариантов. 1) самый простой и неправильный использовать синхроный ajax запрос см http://api.jquery.com/jQuery.ajax/

Хотя там пишут что депрекэйетед

2) var mycoolobject=new function(){var len ;this.print_length($length){len=$length}}

$post(…,function(json){mycoolobject.print_length(json.length)},'json')

3) навесить на дом элемент обработчик кастомнго эвента и triger этот самый эвент из функции

4)посмотреть в сторону defered.

Jaberwock ★★★
()
Последнее исправление: Jaberwock (всего исправлений: 2)
Ответ на: комментарий от ritsufag

Разбиваю вывод на страницы и для этого нужно кол-во возвращенных записей.
Может кнопки банить «вперед|назад» прямо из $.post, если записей меньше limit?

Кто как делает?

WinLin2 ★★
() автор топика
Ответ на: комментарий от WinLin2

Ты пишешь одностраничное приложение?
ajax вызовы асинхронны т.е ты возвращаешь переменную до того как завершится запрос.
И вставляй примеры в code.

ritsufag ★★★★★
()
Ответ на: комментарий от WinLin2

Ерунда какая-то вместо кода. Где callback в $.post?

Если Вам настолько чужда идея того что яваскрипт асинхронен используйте promise или другие обертки которые превращают цепочку callback-функций в подобие линейного кода.

hidden_4003
()
Ответ на: комментарий от WinLin2

в каком месте не изменяется? И еще ты пропустил функцию. Если там где я добавил многоточие, то этот участок может выполниться до завершения пост запроса. внутри функции которая выполняется по пост запросу будет локальная копия всех доступных переменных пока она не завершится. Присвоение len2=99; может успешно отработать после завершения функции doSearch() var len1; function doSearch() { var len2; $.post(...,function(){len1=99; len2=99;}); return len1 или len2; } … }

И еще, первый вариант лучше не использовать если можешь без него обойтись

Jaberwock ★★★
()

Работа через JSON-RPC:

        $.ajax({
            async: false,           // set async-mode
            type: 'POST',
            url: '/',               // your URI
            data: JSON.stringify({  // Server side expects json-string in body. THIS IS NOT QUERY_STRING!
                id: 1,              // request id
                method: 'mymethod', // method name
                params: [1,2,3]     // method params
            }),
            contentType: "application/json",
            dataType: "json",
            success: function(data) {
              // expect json-rpc
              if (data.error) {
                alert(data.error);
              } else {
                console.log('id: ' + data.id);
                console.log(data.result);
              }
            },
            error: function(err) {
               if (typeof(err) == 'string') {
                  alert('Error: ' + err);
               } else {
                  // nginx throws like this
                  alert('Error: ' + err.statusText);
               }
            }
        });

Вариант для статики:

        $.ajax({
          dataType: "json",
          url: '/test.json',      // uri to json file on server
          async: false,
          success: function (json) {
             console.log(json);
          },
          error: function (err) {
             console.log(err);
          }
        });

gh0stwizard ★★★★★
()

Всем спасибо! Буду более вдумчиво изучать.

WinLin2 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.