Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JQuery] Domandina circa script che aggiunge header HTTP Request

    Ciao,
    allora in una pagina web ho il seguente link:

    Quindi clickando sul link genero una HTTP Request verso il percorso "/mapping/header"

    Associato a tale link con id="byHeader" ho l'attivazione del seguente metodo di uno script JQuery (che da quello che ho capito fà ciò che ho commentato, ovvero cerca dia ggiungere un header all'HTTP Request):

    codice:
    	$("#byHeader").click(function(){	// Seleziona il link avente id="byHeader e gli assegna la seguente funzione di callback per l'evento click"
    		var link = $(this);				// Variabile che si riferisce all'elemento nel DOM che ha scatenato l'evento (il link che è stato clickato)
    		
    		/* La chiamata AJAX non viene invocata su un oggetto particolare (quindi direttamente su $)
    		   I parametri di input sono: 1) L'URL del link selezionato 2) Il tipo di risposta previso (una stringa)
    		*/
    		$.ajax({ url: this.href, dataType: "text", 
    			// Prima di inviare l'HTTP Request esegui la funzione che aggiunge un Header alla richiesta HTTP 
    			beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }, 
    			
    			success: function(form) { 
    				MvcUtil.showSuccessResponse(form, link); 
    			}, 
    			
    			error: function(xhr) { 
    				MvcUtil.showErrorResponse(xhr.responseText, link); 
    			}
    		});
    		return false;
    	});
    Conoscendo molto poco JQuery (ho iniziato a vederlo da poco durante questo esempio) ho vari dubbi in merito all'effettivo funzionamento di tale metodo:

    1) In questo caso chiamo la funzione ajax passandogli: l'URL effettivo della richiesta HTTP (this.href) ed il tipo di risposta che mi aspetto di ricevere (dataType: "text"), ma questa cosa si tratta di un oggetto JSON o non c'entra niente?

    2) Nella riga:
    codice:
    beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }
    stò andando ad aggiungere un header alla mia richiesta http prima che questa venga effettivamente inviata (credo tramite il beforeSend, giusto?)

    Ora quì ho grossi dubbi sul significato di questa cosa...io sapevo che gli header di una HTTP Request fossero qualcosa del tipo:

    codice:
    GET / HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, */*
    Accept-Language: it
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: www.html.it
    Connection: Keep-Alive
    Cookie: __utma=151439968.604684092.1165355506.1165355506.1165357918.2; __utmz=151439968.1165357918.2.2.utmccn=(organic)|utmcsr=google|utmctr=%2Beclipse+%2B%22web+editor%22|utmcmd=organic
    Insomma qualcosa generato da un browser che dà informazioni alla web application del tipo: il tipo di MIME che il server può rimandare indietro al client, la lingua predefinita del browser (usata magari dall'applicazione web per determinare la lingua da usare nell'internazionalizzazione, etcetc)

    Quindi credo che TUTTE le HTTP Request abbiano degli header (generati automaticamente dal browser o comunque dal client richiedente...)

    Con quella riga di codice JQuery cosa stò facendo? E' come se accodassi agli header (del tipo mostrati sopra) una nuova riga avente forma:
    FooHeader: foo

    O cosa?

    3) In caso di successo di tale operazione viene chiamata un'altra funzione a cui viene passato un oggetto form (almeno credo) e che a sua volta richiama un'altra funzione del mio script JQuery, tramite le righe:

    codice:
    			success: function(form) { 
    				MvcUtil.showSuccessResponse(form, link); 
    			},
    Perchè?!?! chi è questo oggetto form ?!?! da dove gli arriva ?!?! mi sfugge

    Grazie mille
    Andrea

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924

    Re: [JQuery] Domandina circa script che aggiunge header HTTP Request

    Originariamente inviato da AndreaNobili
    ...si tratta di un oggetto JSON o non c'entra niente?
    Non esistono oggetti JSON. Esiste il formato JSON, ma nel tuo caso stai dicendo che la risposta sarà testuale (e non strutturato in formato json)

    Originariamente inviato da AndreaNobili

    2) E' come se accodassi agli header (del tipo mostrati sopra) una nuova riga avente forma:
    FooHeader: foo
    O cosa?
    Sì, stai accodando un header.

    Originariamente inviato da AndreaNobili
    3) ... Perchè?!?! chi è questo oggetto form ?!?! da dove gli arriva ?!?! mi sfugge
    è sufficiente prendere in mano la documentazione di jquery sul metodo ajax: success accetta 3 argomenti (http://api.jquery.com/jQuery.ajax/)

    success(data, textStatus, jqXHR)

    il primo argomento è appunto la risposta inviata dal server (e a naso viene utilizzato dall'oggetto MVCUtil probabilmente per inserire il contenuto inviato dal server (il markup di un form?) nel documento corrente
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Ok,
    mi è chiara la questione relativa agli headers della HTTP Request

    Mi rimangono dei dubbi circa quella funzione JQuery però...cerco di spiegare meglio quali sono:

    1) Mi ero già visto la documentazione di JQuery relativa al metodo ajax ed avevo già visto gli argomenti accettati da success e mi è abbastanza chiaro che il primo argomento è la risposta inviata dal server nel documento corrente...

    Solo che non capisco perchè sia "form"

    codice:
    success(data, textStatus, jqXHR)
    il primo argomento è appunto la risposta inviata dal server (e a naso viene utilizzato dall'oggetto MVCUtil probabilmente per inserire il contenuto inviato dal server (il markup di un form?) nel documento corrente visto che nella chiamata al metodo ajax specifico chiaramente che è una STRINGA (tramite dataType: "text"). Infatti la mia classe controller invia una stringa alla mia view che contiene questo script JQuery (e non un form)

    Non capisco se quel nome "form" nel codice sia solo un nome "simbolico" nel senso che in automatico dentro form ci mette il contenuto della HTTP Response oppure se quel nome ha un senso specifico in JQuery...

    Spero di essermi spiegato in maniera chiara

    2) Un altro dubbio che mi è venuto relativamente al precedente codice è relativo alla seguente linea di codice:

    codice:
    beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); },
    chi è questa variabile req? Visto che ci chiamo sopra un metodo chiamato setRequestHeader presuppongo con discreta certezza che contenga il riferimento alla mia HTTP Request a cui stò aggiungendo un header, il fatto è che tale variabile non l'ho mai dichiarata prima d'ora !!! Se la stà dichiarando quà in pratica...e allora...mi viene il dubbio: "come fà a contenere il riferimento alla mia HTTP Request? ce lo mette in automatico o mi sfugge qualcosa?

    Inoltre, analogamente al primo dubbio, req è un nome tanto per dargli un nome (allora avrei potuto chiamarla anche: pippo, pluto o paperino anzichè req) oppure ha un significato sematinco?

    Grazie mille
    Andrea

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    sono parametri di una funzione, non ci sono obblighi sulla loro denominazione, che si chiami form o pippo poco importa(è ovvio che è sempre meglio dare nomi "parlanti"). Per il secondo punto il discordo è il medesimo. Un parametro non deve essere dichiarato in altri punti del codice, e la visibilità di tale parametro è circoscritta alla funzione stessa. E' il framework a richiamare la funzione beforeSend passando come parametro la request.

  5. #5
    Originariamente inviato da Vindav
    sono parametri di una funzione, non ci sono obblighi sulla loro denominazione, che si chiami form o pippo poco importa(è ovvio che è sempre meglio dare nomi "parlanti"). Per il secondo punto il discordo è il medesimo. Un parametro non deve essere dichiarato in altri punti del codice, e la visibilità di tale parametro è circoscritta alla funzione stessa. E' il framework a richiamare la funzione beforeSend passando come parametro la request.
    Okkk...credo di aver capito, quindi funziona così (conferma o smentiscimi per favore):

    Tramite la riga:
    codice:
    $.ajax({ url: this.href, dataType: "text",
    chiamo il metodo ajax passandogli come parametro di input l'URL clickato ed il TIPO DI RITORNO CHE MI ASPETTO "text"

    Poi alla riga:
    codice:
    success: function(form) {
    In pratica è il framework che passa in automatico il valore testuale ritornato dal server...in pratica è il framework che si occupa di mettere dentro il mio parametro form il "text" che mi aspetto mi venga ritornato quando mi viene effettivamente ritornato...

    Ho capito bene?

    Grazie
    Andrea

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    esatto! Quando l'elaborazione del server è terminata il framework invoca la funzione success(callback) passando come parametro la response del server.

  7. #7
    Ciao a tutti! Aggiungo un piccolo dubbio: analizzando una richiesta di get fatta da me e una fatta da chrome nell'aprire una pagina, ho notato che come header mandano connection: keep alive. Non sarebbe giusto mandare connection: close se dopo la mia richiesta di get non devo più fare operazioni? E se così fosse, come faccio a modificare l'header connection di default?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.