Назначить jQuery.get () для переменной? - PullRequest
8 голосов
/ 07 августа 2009

Как правильно присвоить переменной ответ от jQuery.get ()?

var data = jQuery.get("output.csv");

Я читал, что jQuery.get () должен иметь функцию обратного вызова? это почему? и как бы я использовал эту функцию обратного вызова, чтобы присвоить ответ обратно переменной данных?

Заранее спасибо за помощь и разъяснения.

Обновление

Спасибо всем за ваши ответы и объяснения. Я думаю, что начинаю наконец понимать то, что вы все говорите. Мой код ниже делает правильную вещь только на первой итерации. Остальные итерации его написания на странице не определены. Я что-то упустил?

<tbody>
<table id="myTable"> 

    <script type="text/javascript">

        $.get('output.csv', function(data) {
                csvFile = jQuery.csv()(data);

                for ( var x = 0; x < csvFile.length; x++ ) {
                    str = "<tr>";
                    for ( var y = 0; y < csvFile.length; y++) {
                        str += "<td>" + csvFile[y][y] + "</td>";
                    }
                    str += "</tr>";
                }
                $('#myTable').append(str);


        });

    </script>

</tbody>
</table>

Ответы [ 5 ]

8 голосов
/ 07 августа 2009

Функция обратного вызова требуется для асинхронных вызовов функций, например, запрос AJAX GET. Между вызовом функции get и получением ответа существует задержка, которая может составлять миллисекунду или несколько минут, поэтому вам необходимо иметь функцию обратного вызова, которая вызывается после завершения асинхронного GET.

Вот еще немного информации о функции jJuery AJAX get: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype.

Из примеров jQuery:

// this would call the get function and just 
// move on, doing nothing with the results
$.get("test.php");

// this would return the results of the get
$.get("test.php", function(data){
  alert("Data Loaded: " + data);
});

Если вы получаете undefined при попытке использовать переменную data в функции обратного вызова, откройте консоль в Firebug в Firefox и посмотрите запрос get. Вы можете увидеть необработанный запрос и ответ, который он возвращает. Вы должны получить лучшее представление о проблеме после просмотра того, что отправляется на сервер, а что отправляется обратно клиенту.

4 голосов
/ 19 сентября 2012

Я действительно изо всех сил пытался получить результаты jQuery ajax в мои переменные на стадии событий document.ready.

ajax jQuery загружался в мои переменные, когда пользователь вызывал событие «onchange» поля выбора после того, как страница уже была загружена, но данные не передавали переменные при первой загрузке страницы.

Я перепробовал много-много-много разных методов, но, в конце концов, мне нужен был ответ на странице stackoverflow: JQuery - Сохранение ответа ajax в глобальную переменную

Благодаря вкладчику Чарльзу Гильберту я могу получать данные в свои переменные, даже когда моя страница загружается впервые.

Вот пример рабочего скрипта:

    jQuery.extend
    (
       {
          getValues: function(url) 
          {
              var result = null;
              $.ajax(
              {
                url: url,
                type: 'get',
                dataType: 'html',
                async: false,
                cache: false,
                success: function(data) 
                {
                    result = data;
                }
              });
          return result;
          }
       }
    );

// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");

// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");

// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");

// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");
3 голосов
/ 07 августа 2009

Цванхарен хорошо ответил на вопрос, но DCrawmer все еще не понял этого. Позвольте мне попытаться уточнить его. Я упрощаю некоторые из них и сглаживаю некоторые детали.

Посмотрите на код, показанный ниже. Это в значительной степени тот же код, что и у tsvanharen, за исключением того, что я заменил анонимную функцию для обратного вызова на фактический указатель функции, и немного более явный, чтобы вы могли видеть, что происходит:

var x = null;

function myCallback(data)
{
   alert("Data Loaded:" + data);
}

$.get("test.php", myCallback);

// the rest of your code
alert("The value of X is: " + x);

Предполагая, что test.php требуется даже одна или две загрузки, обратите внимание на порядок появления предупреждений:

1. "The value of X is"
2. "Data Loaded"

Функция $.get() запускается мгновенно. JavaScript движется и запускает остальную часть вашего кода прямо сейчас. В фоновом режиме он получает вашу страницу в test.php. jQuery скрывает некоторые грязные детали этого.

Функция обратного вызова (второй аргумент $.get()) запускается позже ( асинхронно ). Или, иначе говоря, функция myCallback является обработчиком события. Это событие «$.get() завершил извлечение данных». До этого момента дело не дойдет. Он не работает, когда $.get() работает! $.get() просто запоминает, где эта функция на потом.

Функция myCallback может запускаться через миллисекунды или минуты, намного позже, чем была обработана $.get().

Если myCallback не запускается до нескольких минут спустя, то каково значение x при запуске кода «Значение X»? Это все еще null. Вот ваш баг .

Чтобы использовать данные, полученные со страницы в вашем скрипте, вы должны сделать что-то вроде этого:

  1. Запустите ваш скрипт, объявите переменную для хранения данных.
  2. Вызов $.get(), с функцией обратного вызова для обработки возврата.
  3. Больше ничего не делать. [Или, по крайней мере, ничего, что требует данных] Пусть страница просто посидит там.

    ... когда-нибудь в будущем ...

    X. Ваша функция обратного вызова запустится и получит результаты вашей веб-страницы. Ваша функция обратного вызова может: * Отображение данных * Присвойте эти данные переменной * Вызывать другие функции * Идите по веселому пути.

3 голосов
/ 07 августа 2009

На самом деле в вашем примере данные будут объектом запроса XMLHttpRequest.

var x;
$.get( 'output.csv', function(data){
    x = data;
    console.log(x); // will give you the contents.
});
1 голос
/ 07 августа 2009

Вам просто нужно указать функцию обратного вызова в параметре для получения метода. Ваши данные будут в переменной, которую вы указали в функции.

$.get("output.csv", function(data) {
    // Put your function code here, the 'data' variable will hold your data.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...