2012-05-21 1 views
0

Ниже мой код:

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url}, 
    function(data1) { 
     alert(data1); 
     var num = $(data1).find('.ruleNum').html(); 
    } 
); 
alert(num); 

Но на линии alert(num); есть ошибка num is undefined. Любая идея, что я делаю неправильно?

Помогите оценить очень.

ответ

2

вы объявили переменную num внутри вашего почтового обратного вызова, так что за пределами этой функции переменного явно не определен

Но даже если вы определяете его снаружи, его значение выиграло 't будет отображаться так, как вы ожидали, поскольку ajax является асинхронным (так что, когда вы предупреждаете эту переменную, вызов ajax все еще работает)

, если вам нужно, чтобы номер num даже снаружи вызывал другую функцию, передающую переменную, например

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url}, 
    function(data1) { 
     alert(data1); 
     continueProcess(data1); 
    } 
}); 

var continueProcess = function(num) { 
    alert(num); 
} 

или использовать Deferred Objects (с Ajax методы возвращают обещание поскольку jQuery 1.5) вы также можете сделать

$.when($.post(...).done(function(num) { 
    alert(num) 
}); 
+0

, если кто-то объяснит нижний предел, я мог бы улучшить свой ответ (и я сам) – fcalderan

1

num является локальной переменной в анонимной функции, переданной в $.post(). Он не существует за пределами области действия, но вы получаете доступ к нему из совершенно другой области.

Кроме того, переменная будет определена позднее, а не когда вы ее используете. Если это глобальная переменная, она все равно будет недоступна в то время, когда вы ее используете, потому что она будет определена только после операция POST завершается.

Таким образом, вы можете использовать только num внутри этой функции. Вот пример того, что вы могли бы сделать:

function numWasReceived(num) { 
    alert(num); 
} 

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url}, 
    function(data1) { 
     alert(data1); 
     var num = $(data1).find('.ruleNum').html(); 
     numWasReceived(num); 
    } 
); 
+1

Кроме того, следует иметь в виду, что '$ .post' является asynchrounous. – Sirko

+0

так что я могу сделать, чтобы принять это значение на улице? – guitarlass

+0

спасибо, нет другого пути? – guitarlass

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