Как получить JQuery пост возвращаемых значений? - PullRequest
0 голосов
/ 15 июля 2010

Я хочу получить высоту и ширину изображения на сервере, используя пост-вызов ajax в php-файл, который возвращает строку с разделителями из двух строк 'width || height'

Мой JavaScript корректеноповещение об этой запрошенной строке из php-файла, чтобы информация теперь была в моем скрипте, но я не могу получить к ней доступ за пределами функции $ .post.

Это работает:

  var getImagesize = function(sFilename)
  {
    $.post("getImagesize.php", { filename: sFilename, time: "2pm" },
    function(data){ 
      alert(data.split('||'));          
    });
  }

Но получениеДругое дело:

// this line calls the function in a loop through images:

var aOrgdimensions = getImagesize($(this, x).attr('src')) ;
alert(aOrgdimension);

// the called function now looks like this:
      var getImagesize = function(sFilename)
      {
        var aImagedims = new Array();
        $.post("getImagesize.php", { filename: sFilename },
        function(data){ 
          aImagedims = data.split('||');          
        });
        return "here it is" + aImagedims ;
      }

Кто-нибудь может сказать мне, что я делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Вы неправильно понимаете, как работает вызов AJAX.Первое «A» в AJAX обозначает асинхронный, что означает, что запрос выполняется независимо от потока кода, который вы выполняете.По этой причине обратные вызовы настолько велики, когда дело доходит до AJAX, поскольку вы не знаете, когда что-то будет сделано, пока это не будет сделано.Тем временем ваш код успешно продолжается.

В вашем коде вы пытаетесь присвоить переменной aOrgdimensions значение, которое вы не узнаете, пока запрос не будет выполнен.Есть два решения:

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

  2. Менее желательно, сделать ваш запрос синхронным.Это означает, что код и страница будут «зависать» в точке запроса и продолжаться только после его завершения.Это делается путем добавления async: false к опциям jQuery.

0 голосов
/ 15 июля 2010

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

Редактировать: разобрался. Использовал функцию обратного вызова, как предложено, и все хорошо. : D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...