2012-11-30 19 views
6

Volevo prendere il valore su una chiamata Ajax utilizzando una funzione. ma il valore torna sempre come non definito. valore di ritorno è solo 1 o 0.come ottenere il valore di ritorno da una chiamata ajax?

qui è il mio codice:

$(function(){ 
    $('#add_product').click(function(){ 
    var i = $('#product_name').val(); 
    param = 'product_name='+i; 
    var value = check_product(param); 
    alert(value); 
    return false; 
    }); 
}); 

function check_product(param){ 
    $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/', 
    success : function(result){ 
     //alert(result); 
     return result; 
    } 
}); 
} 

Ciao ragazzi, ancora lavorando per ottenere questo lavoro. Ricevo il valore che ora mostra 1 o 0. Ciò che sto cercando di ottenere ora è come posso farlo nella dichiarazione if. Volevo avere qualcosa di simile. Se val = 0 restituisce true; altrimenti restituisci falso. Non sono sicuro di essere sulla buona strada per usare la funzione Ajax. Ma se c'è un modo migliore per mostrarmelo, lo apprezzerò.

$(function(){ 
     $('#add_product').click(function(){ 
     var i = $('#product_name').val(); 
     param = 'product_name='+i; 
     check_product(param).done(function(value) { 
     var val = value; //waits until ajax is completed 
     }); 
     if(val == 0){ 
      return true; 
     } else{ 
      return false; 
     } 
     }); 
    }); 

function check_product(param){ 
    return $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/' 
}); 
} 
+3

il 'a' in 'ajax' sta per asincrono ... :) quindi è necessario eseguire le azioni che dipendono dal risultato nel gestore di successo –

+0

È possibile fornire anche il PHP/script? hai anche controllato che PHP/script stia effettivamente ottenendo le variabili che stai passando? –

+0

C'è anche 'async: false' per la richiesta. Non lo userei comunque: p –

risposta

20

E 'asincrona, quindi bisogna attendere la chiamata Ajax per recuperare i dati prima di poter avvisare esso. Si può fare facilmente restituendo la chiamata AJAX e l'utilizzo di done(), in questo modo:

$(function() { 
    $('#add_product').click(function() { 
     var i = $('#product_name').val(), 
      par = 'product_name=' + i; 

     check_product(par).done(function(value) { 
      alert(value); //waits until ajax is completed 
     }); 

     return false; 
    }); 
}); 

function check_product(param) { 
    return $.ajax({ 
     type : 'POST', 
     data : param, 
     url : baseurl + 'cart/check_product_name/' 
    }); 
}​ 
+0

Mai pensato di restituire un oggetto deffered, +1. Normalmente, passerei semplicemente una richiamata. –

+1

@ JanDvorak - Grazie, usato sempre per usare i callback da solo, ma solo restituire l'oggetto posticipato espone fatto, fallito e sempre direttamente e rende molto più facile a mio avviso. – adeneo

+0

@adeneo che è abbastanza bello, grazie! –

1

Aggiungere questo alle opzioni ajax:

dataType: "json", 

e utilizzare

return Json(dataObject, JsonRequestBehavior.AllowGet); 

nel metodo di azione .

tuo

return result; 

nel gestore successo di Ajax non è un ritorno per check_product. Passa un'altra funzione (possibilmente anonima) a check_product e chiama su ajax success.

Problemi correlati