Jestem początkującym ajax-owiczem i mam problem z przsłaniem za pomocą ajax-a pliku zawierającego kod html i java script.
Plik do przesłania - edytor wizualny + pole <textarea>:
<script language="javascript" type="text/javascript"> tinyMCE.init({ mode : "textareas", theme : "advanced", plugins : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,z om,flash,searchreplace,print,contextmenu", theme_advanced_buttons1_add_before : "save,separator", theme_advanced_buttons1_add : "fontselect,fontsizeselect", theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,zoom,separator,forecolor,backcolor", theme_advanced_buttons2_add_before: "cut,copy,paste,separator,search,replace,separator", theme_advanced_buttons3_add_before : "tablecontrols,separator", theme_advanced_buttons3_add : "emotions,iespell,flash,advhr,separator,print", theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", theme_advanced_path_location : "bottom", plugin_insertdate_dateFormat : "%Y-%m-%d", plugin_insertdate_timeFormat : "%H:%M:%S", extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|v
space|width|height|align|onmouseover|on ouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[clas
s|align|style]", external_link_list_url : "example_data/example_link_list.js", external_image_list_url : "example_data/example_image_list.js", flash_external_list_url : "example_data/example_flash_list.js" }) ; </script>
plik HttpClient.js:
function HttpClient() {} HttpClient.prototype = { // typ get lub posr przekazany do metody open requestType:'POST', // jeśli ta zmienna ma wartość true wykonywane są wywołania asynchroniczne isAsync:false, // gdzie przechowywany jest egzemplarz obiektu XMLHttpRequest? xmlhttp:false, // jaka funkcja jest wywoływana po zakończonym powodzeniem wywołaniu asynchronicznym? callback:false, // jaka funkcja jest wywoływana po wykonaniu metody send obiektu XMLHttpRequest? // Użyj własnej funkcji dla zdarzenia onSend, aby zastosować niestandardowy efekt wczytania. onSend:function() { document.getElementById('HttpClientStatus').style.display = 'block'; }, // Funkcja wywołana, kiedy readyState ma wartość 4; jest ona // uruchamiana przed wywołaniem zwrotnym (callback). onLoad:function() { document.getElementById('HttpClientStatus').style.display = 'none'; }, // funkcja wywołana po wystąbłędu http. onError:function(error) { alert(error); }, // metoda inicjiującobiekt XMLHttpRequest init:function() { try { // Mozilla, Safari this.xmlhttp = new XMLHttpRequest(); } catch (e) { // Internet Explorer var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'); var success = false; for(var i=0; i<XMLHTTP_IDS.length && !success; i++) { try { this.xmlhttp = new ActiveObject(XMLHTTP_IDS[i]); success = true; } catch (e) {} } if(!success) { this.onError('Nie można utworzyć obiektu XMLHttpRequest.'); } } }, // Metoda zgłaszająca żądanie strony // @param string url - strona, do której kierowane jest żądanie // @param string payload - wysyłane dane, jęsli jest to żądanie typu POST // @divId - identyfikator bloku, który ma zostać zmieniony (w którym mają pobrane dane) makeRequest:function(url, payload, divId) { if(!this.xmlhttp) { this.init(); } this.xmlhttp.open(this.requestType, url, this.isAsync); this.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // tu należy ustawić onreadystatechange, ponieważ w Mozilli stan zostanie wyzerowany // po zakończeniu wywołania. var self = this; this.xmlhttp.onreadystatechange = function() { self._readyStateChangeCallback(divId); } this.xmlhttp.send(payload); if(!this.isAsync) { return this.xmlhttp.responseText; } }, // wewnętrzna metoda służąca do obsługi zmian stanu. _readyStateChangeCallback:function(divId) { switch(this.xmlhttp.readyState) { case 2 : this.onSend(); break; case 4 : this.onLoad(); if(this.xmlhttp.status == 200) { this.callback(this.xmlhttp.responseText, divId); } else { this.onError('Błąd HTTP w czasie zgłaszania żądania: '+ '['+this.xmlhttp.status+']'+ ''+this.xmlhttp.statusText); } break; } } }
oraz plik funkcje.js ze skryptem odbierającym:
var client3 = new HttpClient(); client3.isAsync = true; client3.callback = function(result, divId) { eval(document.getElementById(divId).innerHTML = result); } function admin_str(link, divId, divId1, divId2) { var myRand = parseInt(Math.random()*99999999); var url = 'admin/include/test1.html?random='+myRand; client3.makeRequest(url, null, divId1); document.getElementById(divId).style.display = 'none'; }
wolne parametry funkcji "admin_str(link, divId, divId1, divId2)" choć częściowo nie wykorzystywane nie są problemem - sprwdzałem
Problem w tym, że po przekazaniu za pomocą ajax plikt html z kodem html i js wyświetla się jedynie pole <textarea>.
Przy próbie wyświetlenia samego pliku do przesłania (edytor+textarea) wszystko jest ok.
Być może coś jest nie tak z użyciem funkcji eval() a może coś innego.
Proszę o wskazówki i pomoć
Pozdrawiam