jQuery возвращает результат ajax во внешнюю переменную

Если вы выполняете команды оболочки, и у вас (как у I) есть фетиш для конвейерной обработки, это хорошо:

seq 1 $END | xargs -I {} echo {}

29
задан Mohd Shahril 16 August 2017 в 17:01
поделиться

4 ответа

Вы пропускаете запятую после

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }

Кроме того, если вы хотите, чтобы return_first содержал результат вашей анонимной функции, вам необходимо вызвать функцию:

var return_first = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
}();

Примечание () в конце.

44
ответ дан Igor 16 August 2017 в 17:01
поделиться

Это все, что вам нужно сделать:

var myVariable;

$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "ajax.php?first",
    'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
    'success': function (data) {
        myVariable = data;
    }
});

ПРИМЕЧАНИЕ: Использование «асинхронного» не рекомендуется. См. https://xhr.spec.whatwg.org/ .

31
ответ дан NightOwl888 16 August 2017 в 17:01
поделиться

Использование 'async': false для предотвращения асинхронного кода является плохой практикой,

Синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя опыт. https://xhr.spec.whatwg.org/

При установке асинхронного режима на поверхность для решения многих проблем, поскольку, как показывают другие ответы, вы получаете данные в переменную. Однако, ожидая возвращения данных поста (что в некоторых случаях может занять несколько секунд из-за вызовов базы данных, медленных подключений и т. Д.), Остальные функции Javascript (такие как инициируемые события, обработанные кнопки Javascript, переходы JQuery (например, аккордеон или автозаполнение (JQuery UI)) не сможет появиться во время ожидания ответа (что очень плохо, если ответ никогда не возвращается, так как ваш сайт теперь по существу заморожен).

Попробуйте вместо этого:

var return_first;
function callback(response) {
  return_first = response;
  //use return_first variable here
}

$.ajax({
  'type': "POST",
  'global': false,
  'dataType': 'html',
  'url': "ajax.php?first",
  'data': { 'request': "", 'target': arrange_url, 'method': method_target },
  'success': function(data){
       callback(data);
  },
});
17
ответ дан Lee Curran 16 August 2017 в 17:01
поделиться

'async': false говорит, что это обесценилось. Я заметил, что если я запускаю console.log('test1'); при успешном выполнении ajax, то console.log('test2'); в обычном js после функции ajax, test2 печатает до test1, поэтому проблема в том, что вызов ajax имеет небольшую задержку, но не останавливается остальная часть функции, чтобы получить результаты. Переменная просто не была установлена ​​"пока", поэтому вам нужно отложить следующую функцию.

function runPHP(){
    var input = document.getElementById("input1");
    var result = 'failed to run php';

    $.ajax({ url: '/test.php',
        type: 'POST',
        data: {action: 'test'},
        success: function(data) {
            result = data;
        }
    });

    setTimeout(function(){
        console.log(result);
    }, 1000);
}

на test.php (если вам нужно протестировать эту функцию)

function test(){
    print 'ran php';
}

if(isset(

'async': false говорит, что это обесценилось. Я заметил, что если я запускаю console.log('test1'); при успешном выполнении ajax, то console.log('test2'); в обычном js после функции ajax, test2 печатает до test1, поэтому проблема в том, что вызов ajax имеет небольшую задержку, но не останавливается остальная часть функции, чтобы получить результаты. Переменная просто не была установлена ​​"пока", поэтому вам нужно отложить следующую функцию.

[110]

на test.php (если вам нужно протестировать эту функцию)

[111]POST['action']) && !empty(

'async': false говорит, что это обесценилось. Я заметил, что если я запускаю console.log('test1'); при успешном выполнении ajax, то console.log('test2'); в обычном js после функции ajax, test2 печатает до test1, поэтому проблема в том, что вызов ajax имеет небольшую задержку, но не останавливается остальная часть функции, чтобы получить результаты. Переменная просто не была установлена ​​"пока", поэтому вам нужно отложить следующую функцию.

[110]

на test.php (если вам нужно протестировать эту функцию)

[111]POST['action'])) { $action = htmlentities(

'async': false говорит, что это обесценилось. Я заметил, что если я запускаю console.log('test1'); при успешном выполнении ajax, то console.log('test2'); в обычном js после функции ajax, test2 печатает до test1, поэтому проблема в том, что вызов ajax имеет небольшую задержку, но не останавливается остальная часть функции, чтобы получить результаты. Переменная просто не была установлена ​​"пока", поэтому вам нужно отложить следующую функцию.

[110]

на test.php (если вам нужно протестировать эту функцию)

[111]POST['action']); switch($action) { case 'test' : test();break; } }
0
ответ дан SwiftNinjaPro 16 August 2017 в 17:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: