2015-02-08 4 views
1

Мне сложно определить, как получить результаты успеха от jquery/ajax. Я попытался вызвать внешнюю функцию, чтобы убедиться ... установка результата как глобального ... глобальная? Я понимаю, как работает область действия, но, похоже, здесь это не работает. Может быть, я не понимаю сферу применения jquery? Ниже приводится информация о том, где я сейчас - много проб и ошибок. В этом случае использование предупреждения по данным ['test'] дает мне результат, который я ищу, но когда я вызываю setSession(), установка session_results не работает.

* edit - Я только заметил, что сценарий не ждет окончания $ .post, поэтому есть моя проблема. Функции обратного вызова, в соответствии с другими вопросами, заданными здесь. У кого-нибудь есть пример или рекомендация? В противном случае этот поток может быть закрыт.

** Редактировать - Спасибо Cuong Le.

// SESSION 
var session_results; 
function setSession(data) { 
    session_results = data; 
} 
function SESSION() { 
    $.post(
     "handler.php", 
     { get_session: "get_session" }, 
     function(data) { 
      alert(data['test']); 
      setSession(data); 
     }, 
     "json" 
    ); 
} 

SESSION(); 
alert(session_results['test']); 
+0

Я просто заметил, что сценарий, похоже, не ждет завершения $ .post. Похоже, мне нужно реорганизовать. – Daniel

ответ

1

Вы должны ждать, пока Аякс сообщение не будет сделано, то вы можете предупредить alert(session_results); правильно использовать понятие обещания в JQuery:

var session_results; 
function setSession(data) { 
    session_results = data; 
} 

function SESSION() { 
    var promise = $.post(
     "handler.php", 
     { get_session: "get_session" }, 
     function(data) { 
      alert(data['test']); 
      setSession(data); 
     }, 
     "json" 
    ); 

    return promise; 
} 

var result = SESSION(); 

result.done(function(){ 
    alert(session_results); 
}); 

Для более корректирующего, вы должны использовать новый синтаксис JQuery Ajax с помощью done функции:

function SESSION() { 
    var promise = $.post("handler.php", { get_session: "get_session" }) 
        .done(function(data) { 
         alert(data['test']); 
         setSession(data); 
        }); 

    return promise; 
} 
+0

Как бы включить в него «json» или автоматически ли это обрабатывать? Я предполагаю («handler.php», {get_session: «get_session»}, «json») – Daniel

+0

@ Даниэль: это ручка автоматически, вы должны прочитать http://api.jquery.com/jquery.post/ для получения дополнительной информации подробно –

+0

Да. Я читал это. Второй - последний пример - это то, где я начал возвращать json-закодированные результаты. Но я застрял, как указывает Шахар, асинхронный характер AJAX (har har) и не понимал этого. : -P. Совершенная вещь, я чувствую себя глупо, не замечая ее. – Daniel

0

Это потому, что AJAX расшифровывается как Asynchronous Явь aScript и XML. Ваш следующий звонок не будет завершен. Так что вы можете сделать вместо этого:

var session_results; 
function setSession(data) { 
    session_results = data; 
} 
function SESSION() { 
    $.post(
     "handler.php", 
     { get_session: "get_session" }, 
     function(data) { 
      alert(data['test']); 
      setSession(data); 
      alert(session_results['test']); //moved to here 
     }, 
     "json" 
    ); 
} 

SESSION(); 

Или вы можете использовать $.ajax с async прочь.

Смежные вопросы