JQuery AJAX HAndling проблема - PullRequest
1 голос
/ 22 июня 2011

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

Итак, вот что у меня есть

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

, так что теперь к моему объектному коду обработчика ajax:

function ajaxHandler(pageName,functionCall){
this.pageName       = pageName;
this.functionCall   = functionCall;

// set functions
this.getPage = getPage;
this.setPage = setPage;
this.getFunctionCall = getFunctionCall;
this.setFunctionCall = setFunctionCall;
this.performAjaxCall = performAjaxCall;
}
// accessor for current page
function getPage(){
    return this.pageName;
}

// accessor for setting the current page
function setPage(page){
    this.pageName = page;
}

// accessor for retrieving the current functionCall
function getFunctionCall(){
    return this.functionCall;
}

// accessor for setting the current function call
function setFunctionCall(func){
    this.functionCall = func;
}

// perform the loaded ajax call
// DATA : must be in the form of JSON
function performAjaxCall(data){
    $.ajax({
       type     : 'POST',
       url      : '/ajax/'+ this.pageName + '/' + this.functionCall + '.php',
       dataType : 'json',
       data     : data,
       success  : function(data){
          return data;
       },
       error    : function(xhr, ajaxOptions, thrownError){
          return {"error":true,"msg":thrownError};
       }
    })
 }

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

function getActiveJobs(initPage){
   var ajh = new ajaxHandler('jobs','getActiveJobs');
   var req = {'page' : 1};
   var data = ajh.performAjaxCall(req);
   alert(data.error);
}

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

1 Ответ

2 голосов
/ 22 июня 2011

Вы правы, JavaScript не ждет. performAjaxCall возвращается до получения ответа на запрос. Но даже если это ожидание, вы не можете вернуть значение из обратного вызова следующим образом:

success  : function(data){
      return data;
},

Вы передаете эту функцию $.ajax, поэтому она возвращает значение ne только внутри функции $.ajax. Не влияет на внешнюю функцию performAjaxCall.

Вы должны передать другую функцию, которая будет обрабатывать данные, что-то вроде:

function performAjaxCall(data, cb){
    $.ajax({
       //...
       success: cb,
       error: cb
    });
 }

и

function getActiveJobs(initPage){
   var ajh = new ajaxHandler('jobs','getActiveJobs');
   var req = {'page' : 1};
   ajh.performAjaxCall(req, function(data) {
       alert(data.error);
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...