Javascript: возвращение значения из моей функции AJAX - PullRequest
1 голос
/ 09 марта 2012
function ajaxFunction(id){
  var ajaxRequest;
  var response;
      try{
      // Opera 8.0+, Firefox, Safari
      ajaxRequest = new XMLHttpRequest();
      } catch (e){
      // Internet Explorer Browsers
      try{
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
      try{
      ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e){
      alert("Ajax Failed");
      return false;
    }
  }
}
ajaxRequest.onreadystatechange = function(){
  if(ajaxRequest.readyState == 4){
    response = ajaxRequest.responseText;
  }
}
ajaxRequest.open("GET", "http://priest/getpic.php?id="+id, true);
ajaxRequest.send(null);
return response;

}

function lightbox(id) {
var image;
var imageArr;
document.write(image);

image = ajaxFunction(id);
imageArr = image.split('|');

imageSrc = imageArr[0];
imageWidth = imageArr[1];
imageHeight = imageArr[2];

getElementById('lightbox').visibility=visible;
getElementById('lightboximg').src=imageSrc;

if(imageWidth > 700) {getElementById('lightboximg').width=700;}
if(imageHeight > 500) {getElemetnById('lightboximg').height=500;}


}

Проблема, с которой я столкнулся, заключается в том, что мой код вызывает ajaxFunction () для переменной изображения, ajaxFunction () ничего не возвращает в переменную, из-за чего я получаю следующую ошибку.

Uncaught TypeError: Невозможно вызвать метод 'split' неопределенного лайтбокса (анонимная функция)

Любая справка будет высоко оценена.

1 Ответ

1 голос
/ 09 марта 2012

AJAX означает Asynchronous JavaScript and XML.Ключевой частью здесь действительно является Асинхронная часть.Это означает, что при отправке запроса на сервер для получения информации браузер извлекает информацию в фоновом режиме , не влияя на отображение и поведение существующей страницы.Из-за этого коллбэки огромны, когда дело доходит до AJAX - вы не знаете, что вашему серверу понадобится 500 мс или 3 с, чтобы вернуть значение, поэтому все, что вы действительно можете сделать, это отправить запрос и сказать:сделано, я хочу, чтобы ты сделал это".В вашем текущем коде ваш сервер очень редко будет иметь время для возврата того, что getpic.php делает, прежде чем вы попытаетесь вернуть значение функции.Вам просто нужно изменить свой код, чтобы ajaxFunction мог принять второй аргумент, который является обратным вызовом функции, который затем запускается внутри части onreadystatechange кода.

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