Visualizzazione dei risultati da 1 a 8 su 8

Discussione: funzioni uguali e ajax

  1. #1

    funzioni uguali e ajax

    salve io utilizzo ajax con questa funzione.
    il codice per utilizzare l'ayax è il seguente:
    function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser== "Microsoft Internet Explorer"){
    ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    ro = new XMLHttpRequest();
    }
    return ro;
    }

    var http = createRequestObject();

    function sndReq(file,action) {
    http.open("get", file+"?action="+action);
    http.onreadystatechange = handleResponse;

    http.send(null);
    }
    function handleResponse() {
    if(http.readyState == 4){
    var response = http.responseText;

    var splitString = response.split("#####");
    var text1 = splitString[0];
    var text2 = splitString[1];
    //document.write(text1);

    document.getElementById(text2).innerHTML = text1;
    //sndReq();
    }
    }

    nella pagina html utilizzo questa funzione:
    <script>
    function caricaFunzioni(){
    sndReq('tri_1.php','<? echo $_POST['SCOMP1_1'];?>');
    sndReq('tri_2.php','<? echo $_POST['SCOMP1_2'];?>');
    sndReq('tri_3.php','<? echo $_POST['SCOMP1_3'];?>');
    sndReq('tri_4.php','<? echo $_POST['SCOMP1_4'];?>');
    }
    </script>
    </head>
    <body onload="caricaFunzioni()">

    i file tri_1.php sono fatti più o meno tutti così':
    if($_GET['action']=="IN"){?>
    <div style="clear:left; border-bottom:1px solid #000">
    <div style="float:left;width:240px; padding:8px 5px 8px 5px; ">
    In caso di segno "IN" - Tolleranza - Segno:
    </div>
    <div style="float:left;width:177px; padding:5px; border-right:1px solid #000">
    <? $arrayIN=array("+","-","+ o -");?>
    <select name="STOL1_1" >
    <? arrayOptionUTF8($arrayIN,trim($_SESSION['STOL1_1']),"","");?>
    </select>
    </div>
    <div style="float:left;width:240px; padding:8px 5px 8px 5px; ">
    Valore Tolleranza per Target Valore o %
    </div>
    <div style="float:left;width:178px; padding:5px; ">
    <input type="text" name="VTOL1_1" value="<? echo $_SESSION['VTOL1_1'];?>" />
    </div>
    <div style="clear:left"></div>
    </div><? } ?>#####tri_1

    il problema è che richiamando quattro volte la funzione sndReq le stesse vanno in conflitto. Avrei la necessità che ogni funzione inizi quando la precedente ha terminato tutto il lavoro
    in pratica quando viene stampato il contenuto il contenuto del div con id tri_1 venga richiamato
    la seconda funzione.
    spero di essere stato chiaro.
    Accetto altri suggerimenti..
    grazie

  2. #2
    Nel tuo caso serve una chiamata Ajax sincrona e non asincrona
    Se si esegue la chiamata sincrona il flusso si ferma sulla ajax.send fino a che non &eacute; arrivata la risposta del server. A questo punto si pu&oacute; interrogare lo stato e prendersi il responseText.

    Esempio per te:
    codice:
    function sndReq(file,action) {
    	http.open("get", file+"?action="+action, false);// sincrona!
    	http.send(null);   //qua si ferma in attesa di risposta
    	//ora posso testare il readyState e prendere il responseText
    	if(http.readyState == 4){
    		var response = http.responseText;
    		var splitString = response.split("#####");
    		var text1 = splitString[0];
    		var text2 = splitString[1];
    		document.getElementById(text2).innerHTML = text1;
    	}
    }
    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    ciao ti ringrazio per la risposta. ma appenda inserisco il ,false come indicato da te mi da sempre un errore "document.getElementById() è nullo o non è un oggetto. come devo fare?

    function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser== "Microsoft Internet Explorer"){
    ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    ro = new XMLHttpRequest();
    }
    return ro;
    }

    var http = createRequestObject();

    function sndReq(file,action) {
    http.open("get", file+"?action="+action, false);// sincrona!
    http.send(null); //qua si ferma in attesa di risposta
    //ora posso testare il readyState e prendere il responseText
    if(http.readyState == 4){
    var response = http.responseText;
    var splitString = response.split("#####");
    var text1 = splitString[0];
    var text2 = splitString[1];
    document.getElementById(text2).innerHTML = text1;
    }
    }

  4. #4
    scusa, errore mio (per la fretta)
    la funzione corretta:
    codice:
    function sndReq(file,action) {
    	http.open("get", file+"?action="+action, false);// sincrona!
    	http.send(null);   //qua si ferma in attesa di risposta
    	//ora posso testare  status per prendere il responseText
        if(http.status == 200) {
    		var response = http.responseText;
    		var splitString = response.split("#####");
    		var text1 = splitString[0];
    		var text2 = splitString[1];
    		document.getElementById(text2).innerHTML = text1;
        } else {
            alert("Si è verificato un errore: \n" + http.status + " - " + http.statusText);
        }
    }
    Nel modo sincrono, non bisogna testare http.readyState == 4 ma http.status == 200 (che significa che il server ha risposto correttamente)

    Un ottimo esempio dell'uso (sincrono e asincrono) di una chiamata ajax la trovi QUI

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  5. #5
    continua a darmi sempre lo stesso problema.
    se stampo la variabile response mi da solo questo:
    #####tri_1
    mentre mi aspetterei il contenuto del file davanti ai cancelletti



    function sndReq(file,action) {
    http.open("get", file+"?action="+action, false);// sincrona!
    http.send(null); //qua si ferma in attesa di risposta
    //ora posso testare il readyState e prendere il responseText
    if(http.status == 200){
    var response = http.responseText;
    document.write(response);
    var splitString = response.split("#####");
    var text1 = splitString[0];
    var text2 = splitString[1];
    document.getElementById(text2).innerHTML = text1;
    }else {
    alert("Si è verificato un errore: \n" + http.status + " - " + http.statusText);
    }

    }

  6. #6
    a parte che se tu scrivi una document.write a pagina caricata essa sostituisce TUTTO il contenuto della pagina con il parametro della document.write, il problema è un altro:
    "Ma tu sai esattamente cosa ti aspetti che contenga response?"
    Io mi aspettavo fosse una stringa nel formato "abcdefghijklmn#####opqrstuv"
    dalla quale, eseguendo
    var splitString = response.split("#####");
    si ottiene un array, in questo caso di due elementi, nel quale il primo elemento è "abcdefghijklmn" ed il secondo è "opqrstuv".

    Tu dici che ottieni "#####tri_1"
    mmmh
    [list=1][*]hai controllato con un paio di alert cosa contengono text1 e text2 ?
    (non usare la document.write, usa la alert(text1) e alert(text2)[*]hai controllato che esista un elemento nella pagina con id == al contenuto di text2?[*]hai controllato che il contenuto di text2 non ammia caratteri blankl in coda?
    (es. se fosse "tri_1 " la document.getElementById(text2) non troverebbe un id="tri_1")[*]hai controllato che la pagina (o almeno il DOM) sia stata completamente caricata prima di invocare la funzione sndReq ?
    (se la funzione viene invocata prima che il caricamento del DOM è completato, l'oggetto di cui fai la getElementById non esiste ancora!)[/list=1]
    Rispondi alle domande, poi andiamo avanti.
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  7. #7
    ho risolto. avevo commesso io un errore!!
    grazie

  8. #8
    ottimo!

    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

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.