Вернуть данные $ .get в функцию, используя jQuery

Оберните свои строки в / /i. Это простой способ использовать регулярное выражение для игнорирования обсадной колонны

33
задан Peter Mortensen 31 January 2016 в 17:30
поделиться

5 ответов

У вас есть несколько разных ошибок. Во-первых, $ .get не возвращает значение, возвращаемое функцией обратного вызова. Он возвращает объект XHR. Во-вторых, функция get не синхронна, она асинхронна, поэтому showGetResult, скорее всего, вернется до завершения get. В-третьих, вы не можете вернуть что-то из обратного вызова во внешнюю область видимости. Однако вы можете связать переменную во внешней области и установить ее в обратном вызове.

Чтобы получить нужную вам функциональность, вам нужно использовать $ .ajax и установить для параметра async значение false. Затем вы можете определить переменную во внешней области видимости и назначить ее в обратном вызове ajax, возвращая эту переменную из функции.

function showGetResult( name )
{
     var result = null;
     var scriptUrl = "somefile.php?name=" + name;
     $.ajax({
        url: scriptUrl,
        type: 'get',
        dataType: 'html',
        async: false,
        success: function(data) {
            result = data;
        } 
     });
     return result;
}

Вам, вероятно, будет лучше служить, хотя,

94
ответ дан 27 November 2019 в 17:31
поделиться

Похоже, вам нужен синхронный запрос: Как заставить jQuery выполнять синхронный, а не асинхронный запрос Ajax?

Или вы можете передать обратный вызов вашей функции:

function showGetResult (name, callback) {
  var scriptURL = "somefile.php?name=" + name;
  return $.get(scriptURL, {}, callback);
}

showGetResult("John", function(data){ alert(data); });
6
ответ дан 27 November 2019 в 17:31
поделиться

Основная ошибка, которую вы делаете, заключается в том, что вызов AJAX выполняется асинхронно, поэтому к тому времени, когда вы вернетесь, результат еще не готов. Чтобы это работало, вы можете изменить свой код следующим образом:

$(function() {
    showGetResult('John');
});

function showGetResult (name) {
    $.get('somefile.php', { 
        // Pass the name parameter in the data hash so that it gets properly
        // url encoded instead of concatenating it to the url.
        name: name 
    }, function(data) { 
        alert(data); 
    });
}
8
ответ дан 27 November 2019 в 17:31
поделиться

Фундаментальная ошибка - это "асинхронная" часть AJAX. Поскольку вы не знаете, сколько времени потребуется серверу, чтобы отправить ответ, методы AJAX никогда не «блокируются» - то есть вы не вызываете сервер и просто сидите там, ожидая результата. Вместо этого вы переходите к чему-то другому, но вы настраиваете метод, называемый «обратным вызовом», который срабатывает, когда возвращаются результаты. Этот метод отвечает за то, что нужно сделать с данными (например, вставлять их на страницу).

2
ответ дан 27 November 2019 в 17:31
поделиться

Это неправильный способ. Функция (данные) является функцией обратного вызова, поэтому всякий раз, когда return $ .get будет выполняться .. существует вероятность, что функция обратного вызова не была бы вызвана.

Лучше вызовите функцию получения данных сообщения из метода функции (данных).

1
ответ дан 27 November 2019 в 17:31
поделиться
Другие вопросы по тегам:

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