сохранить данные поста jquery в переменной - PullRequest
1 голос
/ 16 мая 2011

Я прочитал очень много вопросов по этой проблеме, и я не могу найти ответ.

Все, что я хочу сделать (что я думал, будет самой простой вещью в 2011 году), это получить некоторую информацию отмоя база данных с JQuery и AJAX и сохранить его в переменной, чтобы позже сделать некоторые вещи с ним.5 часов спустя я все еще здесь.Это невозможно сделать?

Типичные примеры этого:

$.post("test.php", { name: "John", time: "2pm" },
   function(data) {
     alert("Data Loaded: " + data);
   });

и

$.post("test.php", { name: "John", time: "2pm" },
   function(data) {
     $("somediv").html(data);
   }); 

Так что это прекрасно работает ... если вы простоиспользуйте значение сейчас и забудьте о нем.

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

когда я назначаю данные переменным, значения всегда теряются.Прочитав кучу ответов по этому поводу, очевидно, нет никакого способа вернуть данные, потому что эта функция асинхронная и работает по-другому, и мы не понимаем, как она работает, и т. Д.

Например, я попробовал это:

вернуть данные из jquery $ .post

Но это не сработало для меня.Или я не правильно понял, это объяснение или пример?Предполагается ли вводить обратный вызов или я должен заменить его на что-нибудь?

Некоторые люди говорят, что вызывают другую функцию, как здесь:

Jquery возвращают данные сообщения

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

Наконец я сказал, что вы знаете, что я просто положу значение в скрытое поле, а затем я получу доступ к нему.Это тоже не сработало, я могу указать значение в поле, но когда я пытаюсь получить к нему доступ ... его еще нет.

Разве я не должен использовать $ .post?Влияет ли $ .ajax на разницу?Как я могу сделать это?Неужели так сложно ajax-получить значение из базы данных и сохранить его в javascript для дальнейшего использования?Все просто используют это прямо сейчас?Это действительно так трудно достичь?

Ответы [ 4 ]

0 голосов
/ 01 февраля 2012

Я тоже долго искал ответ.Я только получил это, вызвав функцию.Для чего бы вам ни понадобилась эта переменная, напишите функцию и используйте ее в $ .post () примерно так:

  $.post( url, { field: value }, 
       function( data ) { 
         yourFunction(data); 
       }); 

  function yourFunction(data){
       // check against db query
       // call other functions
  }

Как я уже сказал, я все еще ищу лучшее решение.

0 голосов
/ 16 мая 2011

Установите переменную вне области вашей почтовой функции ... примерно так:

var returnedData = "";
$.post("test.php", { name: "John", time: "2pm" },
   function(data) {
     returnedData = data;
   }
);
0 голосов
/ 16 мая 2011

Это совсем не сложно, вы просто используете синхронный запрос вместо асинхронного:

var result = $.ajax("test.php", {
  async: false,
  data: { name: "John", time: "2pm" },
});

Однако это обычно не рекомендуется, даже в документации по jQuery, поскольку браузер не отвечает на запросы в ожидании результата. Если возможно, вы должны использовать асинхронный подход.

0 голосов
/ 16 мая 2011

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

Ваш код может выглядеть следующим образом:

<html>
<head>
  <script type="text/javascript">

    // global storage
    var myData;

    // this function will be called if there is a response from the ajax request
    function doSomethingWith(response) {

      // maybe perform some formatting, parsing before

      // save to global variable
      myData = response;
    }


    // some click handlers for demonstration 

    $('#start').click(function() {
      $.post("test.php", { name: "John", time: "2pm" },
        function(data) {
          // call callback
          doSomethingWith(data);
       }); 
    });

    $('#show').click(function() {
      alert("Response was: " + myData);
    });

  </script>
</head>
<body>
  <a id="start" href="#">Fire AJAX Request!</a><br/>
  <a id="show" href="#">Show Response!</a>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...