2013-10-12 4 views
0

как я могу установить переменную dch как возвращаемые данные ajax успеха?Установить значение переменной при успешном завершении

var aid='11111111V'; 
var dch = 0; 
$.ajax({ 
    type:"POST", 
    url:"new_hpa_fun_aplcval.php", 
    data:"aid="+aid, 
    success: function(msg) {    
     if (msg =='OK'){ 
      dch=1;      
     } else { 
      dch=2; 
     } 
    } 
}); 
if (dch==1){ 
    //same php code 
}else if (dch==2){ 
    //another php code 
} 
+2

понять javascript обратные вызовы .. вам нужно сделать это только в функции успеха –

+0

другой способ может быть установлен async: false в передаваемом объекте. Но это неправильный способ делать вещи. –

+3

Что вы подразумеваете под «// тем же самым php-кодом»? – Sergio

ответ

-1

Вы можете попробовать, как этот

1) Оберните Аякса в функции и возвращает значение

2) What does "async: false" do in jQuery.ajax()?

function call() { 
    var temp = 0; 
    $.ajax({ 
     type:"POST", 
     url:"new_hpa_fun_aplcval.php", 
     async: false, // Add this 
     data:"aid="+aid, 
     success: function(msg) {    
      if (msg =='OK'){ 
       temp = 1;      
      } else { 
       temp = 2; 
      } 
     }   
    }); 
    return temp; 
    }   
var dch = call(); 
+0

Операторы 'return' в асинхронных обратных вызовах не влияют. Это не сработает. – Pointy

+0

Это плохая идея, можете ли вы рассказать о причинах downvotes – Praveen

+0

@Pointy О, хорошо, я этого не видел. Поэтому добавление 'ajax = false' решит проблему правильно? пожалуйста, исправьте меня, если я имею в виду неправильный – Praveen

1

Может быть, вы не знакомы с асинхронными операциями. В вашем коде ваш if-else в нижней части вашего кода фактически выполняет до ваш обратный вызов success.

Что вы, вероятно, наблюдаете, так это то, что dch всегда 0. Вы вместо того, необходимо продолжить выполнение кода внутри обратного вызова:

var aid='11111111V'; 
var dch = 0; 
$.ajax({ 
    type:"POST", 
    url:"new_hpa_fun_aplcval.php", 
    data:"aid="+aid, 
    success: function(msg) {    
     if (msg =='OK'){ 
      // perform something here      
     } else { 
      // perform something here 
     } 
    } 
}); 

В этом случае вам не нужно даже переменная dch.

Другой вариант это сделать AJAX называет синхронной путем добавления async: false к параметрам в методе $.ajax. Это заставит ваш код блокировать и ждать ответа до его продолжения.

См. Wiki on Ajax для более подробного описания того, что происходит под капотом jQuery.

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