2011-08-21 17 views
5

Ho due jQuery chiamate Ajax che sto combinando su una pagina. Sono bloccato sul success: function() in ciascuno, come uno è success: function(msg) e l'altro è success: function(data). Non sono sicuro di cosa significano entrambi questi e cosa dovrebbero essere nel codice combinato. Metterò le due chiamate qui sotto, separatamente, e combinate come le ho finora.Che cosa significa `successo: funzione (msg)` nella mia chiamata jQuery Ajax?

Ajax Richiesta n. 1: c'è un $msg .= "<div class='pagination'><ul>"; su questa pagina php di funzioni. Non sono sicuro se questo è ciò a cui questo si riferisce.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: "page="+page, 
    success: function(msg) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(msg); 
     }); 
    } 
}); 

Ajax Richiesta # 2: Per quanto posso vedere, non v'è alcuna data ovunque sul file php di questa chiamata. Non so cosa si riferisce a function(data).

$.get("new_arrivals_data.php",{imgs: value}, function(data){ 
    $("#gallery_container").html(data); 
}); 

combinata Richiesta: ho messo un ? dove msg era nella chiamata originale come io sono sicuro di cosa mettere nel suo posto.

$.ajax 
({ 
    type: "GET", 
    url: "new_arrivals_data.php", 
    data: {page:page, imgs: value}, 
    success: function(?) 
    { 
     $("#gallery_container").ajaxComplete(function(event, request, settings) 
     { 
      gallery_show(); 
      loading_hide(); 
      $("#gallery_container").html(?); 
     }); 
    } 
}); 

risposta

3

msg e data sono semplicemente i nomi dei parametri formali. Si utilizzano quelli per fare riferimento ai dati di risposta passati a quella funzione quando viene richiamata.

È possibile rinominarlo con qualsiasi identificativo JavaScript valido.

Anche se non c'è davvero alcun motivo per chiamare ajaxComplete all'interno del success: callback:

success: function(whatever_you_want_to_call_it) { 
     gallery_show(); 
     loading_hide(); 
     $("#gallery_container").html(whatever_you_want_to_call_it); 
} 

$.get("new_arrivals_data.php",{imgs: value}, function(i_like_ice_cream){ 
    $("#gallery_container").html(i_like_ice_cream); 
}); 

Ricordate, in entrambi i casi, si sta passando una funzione come argomento. Quella funzione è invocata quando viene ricevuta la risposta.

Qualsiasi codice stia invocando quella funzione, sta anche passando la risposta in quella funzione come primo argomento in modo tale che tu possa accedervi. Ecco perché hai definito il parametro.

È molto simile alla dichiarazione di una variabile in una funzione.

$.get("new_arrivals_data.php",{imgs: value}, function(){ 

    var i_like_ice_cream = arguments[0]; 
    $("#gallery_container").html(i_like_ice_cream); 

}); 

Questo fa quasi la stessa cosa. Hai associato una variabile con il primo argomento passato alla funzione di callback.

+0

Quindi stai dicendo che può essere letteralmente qualcosa? Non deve avere nulla a che fare con il file php? – stefmikhail

+0

@stefmikhail: qualsiasi nome di variabile JavaScript valido. Non ha nulla a che fare con il PHP. È proprio come dichiarare una variabile nella tua funzione. 'function() {var msg = argomenti [0]; /*...*/} 'sarebbe effettivamente lo stesso. – user113716

1

È solo un nome per la variabile contenente i dati di risposta restituiti dalla chiamata ajax. Chiamalo come meglio ha senso nel contesto, per rendere il tuo codice più leggibile, ad es. html, resp, logged.

2

Può essere un nome di variabile valido. O data o msg funzionerà, purché si utilizzi lo stesso nell'ambito di tale funzione.

Per spiegare, si imposta success su una funzione anonima, praticamente solo una funzione senza nome. Pertanto, quando jQuery invia l'evento success, richiama la funzione che gli è stata assegnata durante la creazione della richiesta Ajax. Passa anche alcuni argomenti in quella funzione (in questo caso, i dati risultanti dalla richiesta Ajax). Quello che stai definendo è ciò che le informazioni in arrivo dovrebbero essere chiamate nell'ambito di questa nuova funzione.

Prendere il seguente codice, ad esempio:

function workOnBob(aWorker) { 
    aWorker("Bob") 
} 

var sayHi = function(name) { alert("Hello " + name); }; 
var getMarried = function(groom) { alert(groom + " is getting married!"); }; 

workOnBob(sayHi); // "Hello Bob" 
workOnBob(getMarried); // "Bob is getting married!" 

Si può vedere che workOnBob è una funzione, e dovrebbe essere passato una funzione anonima. Invoca quella funzione con la stringa "Bob". Inoltre, notare le funzioni anonime, sayHi e getMarried, hanno denominato gli argomenti che ricevono in modo diverso all'interno del proprio ambito (name e groom rispettivamente). Entrambi prendono la stringa "Bob", ma entrambi scelgono di chiamarla qualcosa di diverso.

Le funzioni anonime e le chiusure possono creare confusione, ma una volta capito, sono molto divertenti.

+0

Risposta fantastica! Capisco molto meglio ora. Cercare di imparare tutta questa roba è difficile senza sapere chi posso chiedere. Curioso, la chiamata dall'alto è tutta all'interno di 'function loadData (pagina) {}'. Quella pagina significa qualcosa di diverso dalla spiegazione sopra? Più avanti nel codice viene chiamato nel seguente modo: 'loadData (1)'. Cosa significa questo? – stefmikhail

+0

Ad ogni modo, dai il tuo nome utente! – stefmikhail

Problemi correlati