2009-08-07 2 views
8

Каков правильный способ присвоения переменной ответа от jQuery.get()?Назначить jQuery.get() переменной?

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

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

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

Update:

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

<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> 

ответ

1

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

$.get("output.csv", function(data) { 
    // Put your function code here, the 'data' variable will hold your data. 
}); 
8

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

Подробнее о функции jQuery 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 запрос. Вы можете увидеть необработанный запрос и ответ, с которым он возвращается. Вы должны лучше понять проблему, увидев, что отправляется на сервер и что отправляется обратно клиенту.

+0

так, как вы получать страницы Временное решение не определено? – 2009-08-07 12:31:57

+0

Я обновил свой ответ с помощью подсказки, чтобы помочь устранить непостоянную переменную данных. –

+0

@DCrawmer проверяет, что говорит пиксель. если синтаксический анализ запроса на получение занимает слишком много, лучше взять данные в обратном вызове. на самом деле это правильный способ сделать это. –

3

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

var x; 
$.get('output.csv', function(data){ 
    x = data; 
    console.log(x); // will give you the contents. 
}); 
+0

Учитывая, что 'get' является асинхронным, не будет ли' log' печатать 'undefined' каждый раз? –

+0

Да, этот код дает мне undefined каждый раз, как я могу это предотвратить? – 2009-08-07 12:31:20

+1

вызовите вызов console.log() внутри обратного вызова! – pixeline

3

tsvanharen ответил на вопрос хорошо, но у 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. Ваша функция обратного вызова получит бежать, и есть результаты вашей веб-страницы. Функция обратного вызова может: * Отобразить данные * Присвоить данные переменным * Вызвать другие функции * Идите по нему весело.

+0

Большое спасибо за разъяснение. посмотрите мое обновление на вопрос и скажите мне, что я делаю неправильно? спасибо за помощь. – 2009-08-07 14:30:26

+0

Разделить и победить. Убедитесь, что jQuery.get фактически возвращает данные, которые, по вашему мнению, являются. Поместите предупреждение (данные) в начале функции, чтобы убедиться, что данные были правильно прочитаны из output.csv. (Это не правильно сформированный URL-адрес, вы уверены, что это то, что вы хотите?) Продолжайте движение оттуда. –

3

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

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

Я пробовал много, много, много различных методов, но в конце концов, ответ мне было нужно на этой StackOverflow странице: JQuery - Storing ajax response into global variable

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

Вот пример рабочего сценария:

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");