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

    Ajax + Javascript + Eval

    Ciao a tutti.

    Ho la seguente situazione:

    Ho una pagina PHP così strutturata (riporto solo la parte necessaria del codice):

    - div#SIDEBAR
    - div#PAGE


    ed uno script esterno richiamato nell'head.

    Menu.js:
    codice:
    var Menu = function () {
    	this.addMenuElements = function (menuList) {
    		for (var i=0; i<menuList.length; i++) { 
    			menuList[i].addEventListener("click", function (e) {
    				e.preventDefault();
    				e.stopPropagation();
    				document.getElementById('page').innerHTML = "Loading ...";
    				var ajax = new XMLHttpRequest();
    				ajax.open("GET", this, true);
    				ajax.send();
    				ajax.addEventListener("readystatechange", function () {
    					if (this.readyState == 4) {
    						document.getElementById('page').innerHTML = this.responseText;
    						var regex = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
    						var str = this.responseText;
    						var scripts = str.match(regex);
    						eval(scripts[0].replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi,'')); 
    					} 
    				}, false);
    			}, false);
    		}	
    	}
    }
    All'interno di SIDEBAR troviamo

    codice:
     …. 
     …. 
     …. 
    …. …


    Successivamente viene istanziato un oggetto di Menu:

    codice:
    <script type='text/javascript'>
    	window.addEventListener('DOMContentLoaded', function () {
    		var menuElements = document.getElementsByName('menuElement');
    		menu = new Menu();
    		menu.addMenuElements(menuElements);
    	}, false);
    </script>

    Alcuni dei link all'interno di SIDEBAR puntano a pagine con codice JS, che dopo aver ottenuto il response da ajax, tramite regex ed eval il codice viene eseguito correttamente.
    Ma questo accade solo la prima volta che viene cliccato un link, se provo a fare una seconda chiamata dallo stesso link il codice JS non viene più eseguito; idem per gli altri link e cioè la prima volta tutto ok la seconda chiamata saltano fuori i seguenti errori.
    DA CONSOLE:

    FIREFOX : TypeError: UpgradeArticoli is not a constructor
    GOOGLE CHROME : Uncaught TypeError: object is not a function


    AGGIUNGO UN ESEMPIO DI PAGINA CON JS:

    codice:
    <div id='upgradeArticoli'> ... </div>
    
    <script type='text/javascript'>
    	var formUpgradeArticoli = document.getElementById('upgradeArticoli');
    	UpgradeArticoli = new UpgradeArticoli();
    	UpgradeArticoli.addForm(formUpgradeArticoli);
    	UpgradeArticoli.searchElements('page');
    </script>
    Magari sarà qualcosa di banale ma uso JS da pochissimo (un mese scarso).
    La ricompensa per una cosa ben fatta è averla fatta. (Emerson)

  2. #2
    Per completezza aggiungo anche il seguente codice:

    codice:
    var UpgradeArticoli = function () {
    	var element_divResponse;
    	
    	var send = function (form) { 
    			document.getElementById('page').innerHTML = "Loading ...";
    		
    			var ajax        = new XMLHttpRequest();
    			var dataSend = new FormData();
    			var inputs      = form.getElementsByTagName("input");
    			var method    = form.method;
    			var action      = form.action;
    					
    			for (var i=0; i<inputs.length; i++) {
    				if (inputs[i].type == "hidden") dataSend.append(inputs[i].name, inputs[i].value);
    				if (inputs[i].type != "submit" && inputs[i].checked) dataSend.append(inputs[i].name, inputs[i].value);
    			}
    					
    			try {
    				ajax.open(method, action, true);
    				ajax.send(dataSend);
    				ajax.addEventListener("readystatechange", stateChange, false);
    			}
    					catch (e) {
    						alert(e);
    					}
    		}
    	
    	
    	this.addForm = function (form) {
    		form.addEventListener("submit", function (e) {
    				e.preventDefault();
    				e.stopPropagation();
    				send(this);		
    			}, false);
    	}
    		
    		
    	this.searchElements = function (divResponse) {
    		element_divResponse = document.getElementById(divResponse);
    	}
    	
    	
    	var stateChange  = function () {
    		if (this.readyState == 4) element_divResponse.innerHTML = this.responseText;
    	}
    	
    }
    La ricompensa per una cosa ben fatta è averla fatta. (Emerson)

  3. #3

    RAGAZZI HO RISOLTO COSì

    RAGAZZI HO RISOLTO COSì:


    nel file UpgradeArticoli.class.js ho cambiato il codice

    DA :
    codice:
    var UpgradeArticoli = function () {
     .......
    ......
    }
    A :
    codice:
    function UpgradeArticoli () {
     .......
    ......
    }
    Poi nella pagina dove viene creata l'istanza ho cambato

    DA :
    codice:
    UpgradeArticoli = new UpgradeArticoli();
    A :
    codice:
    var modificaArticoli = new UpgradeArticoli();

    IN CONCLUSIONE CREDO CHE IL PROBLEMA STAVA IN

    codice:
    UpgradeArticoli  = new UpgradeArticoli ();
    DATO I NOMI UGUALI.....

    NON SONO RIUSCITO PERO' A CAPIRE COME MAI CHE AD OGNI PRIMA CHIAMATA FUNZIONAVA E LA SECONDA INVECE NO!!!


    SALUTI
    Antocom
    La ricompensa per una cosa ben fatta è averla fatta. (Emerson)

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.