problem mit variablen übergabe
markus
- javascript
Halli Hallo habe nen Problemschen...
in dem Script(siehe auszug) soll der wert der Variablen 'kekser' als Parameter in der Funktion 'processResponse()' übergeben werden, sodass ich in der processResponse drauf zugreifen kann, wenn sich 'xmlHttp.onreadystatechange' geändert hat....
also: Könnte mir Jemand sagen, warum kekser nicht nach processresponse() übergeben wird?
<der_Code>...
// kekser wird hier (wahrscheinlich) nich übergeben warum?
xmlHttp.onreadystatechange = new Function ( "processResponse( "+intID+", "+ kekser +" )" );
// window.alert(kekser);da existiert kekser noch..(wert:lesen)!!!
xmlHttp.send( strData );
return dataReturn;
}
function processResponse( intID, kekser ){
// window.alert(kekser); kekser's wert:' [ObjectHTMLDivElement] '
...</der_Code>
lg MS
Hallo,
Wenn
intID = 1;
kekser = "lesen";
dann ist
xmlHttp.onreadystatechange nach Deiner Zuweisung
xmlHttp.onreadystatechange = new Function ( "processResponse( "+intID+", "+ kekser +" )" );
gleich:
function anonymous() { processResponse(1, lesen); }
Ein alert(xmlHttp.onreadystatechange) bringt es an den Tag.
Sobald also xmlHttp.onreadystatechange aufgerufen wird, wird eine _Variable_ mit der Bezeichnung lesen an die Funktion processResponse übergeben.
function processResponse( intID, kekser ){
// window.alert(kekser); kekser's wert:' [ObjectHTMLDivElement] '
Warum die Variable lesen dann allerdings ein [ObjectHTMLDivElement] repräsentiert, ist aus diesem Codeschnipsel nicht zu erkennen.
Was willst Du erreichen? Bzw. was erwartest Du, soll an die Funktion processResponse übergeben werden?
viele Grüße
Axel
Was willst Du erreichen? Bzw. was erwartest Du, soll an die Funktion processResponse übergeben werden?
an processResponse() soll der Wert von kekser weitergegeben werden.
Ich will halt, dass wenn sich xmlHttp.onreadystatechange ändert, die function processresponse() aufruft...und dabei dann der wert von kekser übergeben wird, sodass kekser dann in der processdata() an document.getElementById() übergeben wird und dann der Inhalt,am Tag mit der Id=(hier:lesen), durch AJAX ersetzt wird.
gesamter code:
//-#- code stammt von www.get-the-code.de-#-//
// global xmlhttprequest object
var xmlHttp = false;
/** AJAX functions **/
// constants
var REQUEST_GET = 0;
var REQEST_POST = 2;
var REQUEST_HEAD = 1;
var REQUEST_XML = 3;
/**
* instantiates a new xmlhttprequest object
* @return xmlhttprequest object or false
*/
function getXMLRequester( ){
var xmlHttp = false;
// try to create a new instance of the xmlhttprequest object
try
{
// Internet Explorer
if( window.ActiveXObject )
{
for( var i = 5; i; i-- )
{
try
{
// loading of a newer version of msxml dll (msxml3 - msxml5) failed
// use fallback solution
// old style msxml version independent, deprecated
if( i == 2 )
{
xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
}
// try to use the latest msxml dll
else
{
xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
}
break;
}
catch( excNotLoadable )
{
xmlHttp = false;
}
}
}
// Mozilla, Opera und Safari
else if( window.XMLHttpRequest )
{
xmlHttp = new XMLHttpRequest();
}
}
// loading of xmlhttp object failed
catch( excNotLoadable )
{
xmlHttp = false;
}
return xmlHttp ;
}
/**
* sends a http request to server
* @param strSource, String, datasource on server, e.g. data.php
* @param strData, String, data to send to server, optionally
* @param intType, Integer,request type, possible values: REQUEST_GET, REQUEST_POST, REQUEST_XML, REQUEST_HEAD default REQUEST_GET
* @param strData, Integer, ID of this request, will be given to registered event handler onreadystatechange', optionally
* @return String, request data or data source
*/
function sendRequest( kekser , strSource, strData, intType, intID ){
if( !strData )
strData = '';
// default type (0 = GET, 1 = xml, 2 = POST )
if( isNaN( intType ) )
intType = 0; // GET
// previous request not finished yet, abort it before sending a new request
if( xmlHttp && xmlHttp.readyState )
{
xmlHttp.abort( );
xmlHttp = false;
}
// create a new instance of xmlhttprequest object
// if it fails, return
if( !xmlHttp )
{
xmlHttp = getXMLRequester( );
if( !xmlHttp )
return;
}
// parse query string
if( intType != 1 && ( strData && strData.substr( 0, 1 ) == '&' || strData.substr( 0, 1 ) == '?' ) )
strData = strData.substring( 1, strData.length );
// data to send using POST
var dataReturn = strData ? strData : strSource;
switch( intType )
{
case 1: // xml
strData = "xml=" + strData;
case 2: // POST
// open the connection
xmlHttp.open( "POST", strSource, true );
xmlHttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
xmlHttp.setRequestHeader( 'Content-length', strData.length );
break;
case 3: // HEAD
// open the connection
xmlHttp.open( "HEAD", strSource, true );
strData = null;
break;
default: // GET
// open the connection
var strDataFile = strSource + (strData ? '?' + strData : '' );
xmlHttp.open( "GET", strDataFile, true );
strData = null;
}
// set onload data event-handler
//###--wird hier nich übergeben warum?--###
xmlHttp.onreadystatechange = new Function ( "processResponse( "+intID+", "+ kekser +" )" );
// send request to server
// window.alert(kekser);
xmlHttp.send( strData ); // param = POST data
return dataReturn;
}
/*
* process the response data from server
* @param intID, Integer, ID of this response
*/
function processResponse( intID, kekser ){
window.alert(kekser);
// status 0 UNINITIALIZED open() has not been called yet.
// status 1 LOADING send() has not been called yet.
// status 2 LOADED send() has been called, headers and status are available.
// status 3 INTERACTIVE Downloading, responseText holds the partial data.
// status 4 COMPLETED Finished with all operations.
switch( xmlHttp.readyState ){
case 0: // uninitialized
case 1: // loading
case 2: // loaded
case 3: // interactive
break;
case 4:
// check http status
if( xmlHttp.status == 200 ) // success
{
processData( kekser, xmlHttp, intID );
}
// loading not successfull, e.g. page not available
else
{
if( window.handleAJAXError )
handleAJAXError( xmlHttp, intID );
else
alert( "ERROR\n HTTP status = " + xmlHttp.status + "\n" + xmlHttp.statusText ) ;
}
}
}
##########################-ENDE-CODE-#############################
############################-AUFRUF-DATEI-#########################
.....
<script src="js/ajax.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
window.setInterval("sendRequest('lesen', 'lesen.php' )", '1500');
function processData(kekser, xmlHttp, intID ){
document.getElementById(kekser).innerHTML = xmlHttp.responseText;
}
</script>
</head>
<body class='chat' onload="sendRequest('lesen', 'chat_lesen.php' )">
....
Hallo,
Was willst Du erreichen? Bzw. was erwartest Du, soll an die Funktion processResponse übergeben werden?
an processResponse() soll der Wert von kekser weitergegeben werden.
Also in dem Fall der String "lesen", nicht der Variablenbezeichner lesen?
.onreadystatechange = new Function ( "processResponse( "+intID+", '"+ kekser +"' )" );
Beachte die Stringbegrenzer.
var a = new Object();
function init() {
var intID = 1;
var kekser = "lesen";
a.onreadystatechange = new Function ( "processResponse( "+intID+", '"+ kekser +"' )" );
alert(a.onreadystatechange);
}
function processResponse( intID, kekser ){
window.alert(intID);
window.alert(kekser);
}
init();
a.onreadystatechange();
viele Grüße
Axel
hey danke....lerne, wie man wahrscheinlich merkt erst seit einem Monat Javascript...