» »

JavaScript - funkcija ni definirana?

JavaScript - funkcija ni definirana?

Housy ::

Oooo :D

Zakaj mi JavaScript konzola javlja napako, da funkcija ni definirana, če pa sem jo definiral? Sem že vprašal google, ampak ne najdem odgovora :|

var ShowEdit = function(id, name, email, country) { ...




Kaj bi lahko bilo narobe?

Tnx, Housy

jype ::

Ne vidim, kje je na strani /ajax/ funkcija definirana.

Housy ::

Kot vidim, nisem edini, ki tak dolgo bedi :))

V glavi (head) includam skripto.
<script type="text/javascript" src="ajax.js"></script>

Housy ::

Problem zgleda nastane tukaj. Imam namreč dva fajla (index.php in stranke.php). V indexu je vsa html in ajax koda, v stranke.php pa nardim mysql poizvedbo in v tabeli izpišem vsa imena ter ostale podatke. Zraven vsake izpisane stranke pa je dodan še gumb UREDI in če kliknem nanj, se sproži funckija ShowEdit(), ki pa ne deluje. Morda zato, ker ni klicana direktno v index fajlu, kjer je includana tudi vsa ajax koda, ampak je klicana v stranke.php

Housy ::

Bom raje priložil kar kodo vseh treh datotek, saj bo verjetno tako najlažje. Bil bi zelo hvaležen, če nekdo pregleda kodo in pove, kaj delam narobe. Hvala

datoteka index.php
<!DOCTYPE html>
<html lang="sl">

    <head>
	
        <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
        <title>Urejanje v Ajaxu</title>
		
        <style type="text/css">
		
		    table tr th,
            table tr td	{ text-align: center; vertical-align: top }
		
		</style>
		
		<script type="text/javascript" src="ajax.js"></script>

    </head>

    <body Onload="javascript:dataUpdate('list');">
	
	    <form id="form">
	
	        <span id="editForm" style="display='none';">
		
		        <table cellpadding="0" cellspacing="5">
			        <tr>
					    <th>ID</th>
						<th>NAME</th>
						<th>EMAIL</th>
						<th>COUNTRY</th>
					</tr>
					<tr>
					    <td><input type="text" name="txtID" id="txtID" disabled="true" /></td>
					    <td><input type="text" name="txtName" id="txtName" /></td>
						<td><input type="text" name="txtName" id="txtEmail" /></td>
						<td><input type="text" name="txtName" id="txtCountry" /></td>
					</tr>
					<tr>
					    <td colspan="2"><input type="button" name="update" id="update" value="Update" onClick="javascript:dataUpdate('update');" /></td>
					</tr>
			    </table>
		
		    </span>
	 
	        <span id="response"></span>
	
	    </form>

    </body>

</html>

datoteka stranke.php
<?php

$mode = @$_POST["mode"];

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("stranke") or die(mysql_error());

if($mode == "update") {

    $sql = "UPDATE members
	        SET name = '".mysql_real_escape_string($_POST["name"])."',
			    email = '".mysql_real_escape_string($_POST["email"])."',
				country = '".mysql_real_escape_string($_POST["email"])."'
			WHERE id = '".mysql_real_escape_string(intval($_POST["id"]))."'";
			
	$qry = mysql_query($sql) or die(mysql_error());

}

$sql = "SELECT * FROM members
        ORDER BY id DESC";
		
$qry = mysql_query($sql) or die(mysql_error());

?>
<table width="640" border="1">
    <tr>
        <th>ID</th>
        <th>NAME</th>
        <th>EMAIL</th>
        <th>COUNTRY</th>
		<th>&nbsp;</th>
    </tr>
    <?php while($result = mysql_fetch_array($qry)) { ?>
    <tr>
        <td><div align="center"><?php print $result["id"]; ?></div></td>
        <td><?php print $result["name"]; ?></td>
        <td><?php print $result["email"]; ?></td>
        <td><?php print $result["country"]; ?></td>
        <td align="center"><a href="javascript:ShowEdit('<?php print $result["id"]; ?>', '<?php print $result["name"]; ?>', '<?php print $result["email"]; ?>', '<?php print $result["country"]; ?>');">Edit</a></td>
    </tr>
    <?php } ?>
</table>
<?php mysql_close(); ?>

ajax.js
function dataUpdate(mode) {
	
    var ajaxRequest;  // The variable that makes Ajax possible!
	
	try { 
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try {
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}
				
	var url = "stranke.php";
				
	if(mode == "update") {
				
	    var parameters = "id=" + enodeURI(document.getElementById("txtID").value) +
					     "&name=" + enodeURI(document.getElementById("txtName").value) +
					     "&email=" + encodeURI(document.getElementById("txtEmail").value) +
					     "&country=" + encodeURI(document.getElementById("txtCountry").value) +
					     "&mode=" + mode;
				
    }
				
	if(mode == "list") { var parameters = ''; }
				
	ajaxRequest.open("POST", url, true);
	ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxRequest.setRequestHeader("Content-length", parameters.length);
	ajaxRequest.setRequestHeader("Connection", "close");
	ajaxRequest.send(parameters);
				
	ajaxRequest.onreadystatechange = function() {
				
	    if(ajaxRequest.readyState == 3) { document.getElementById("response").innerHTML = "The script is loading ..."; }
					
	    if(ajaxRequest.readyState == 4) {
					
		    document.getElementById("editForm").style.display = 'none';
						
		    document.getElementById("txtID").value = '';
		    document.getElementById("txtName").value = '';
		    document.getElementById("txtEmail").value = '';
		    document.getElementById("txtCountry").value = '';
						
		    document.getElementById("response").innerHTML = ajaxRequest.responseText;
					
		}
				
	}
				
	var ShowEdit = function(id, name, email, country) {
			
		document.getElementById("editForm").style.display = '';

		document.getElementById("txtID").value = id;
		document.getElementById("txtName").value = name;
		document.getElementById("txtEmail").value = email;
		document.getElementById("txtCountry").value = country;		
	   
	}
			
}

Zgodovina sprememb…

  • spremenil: Housy ()

frudi ::

V ostalo se nisem poglabljal, ampak problem s funkcijo ShowEdit je, da je definirana kot 'privatna' znotraj dataUpdate funkcije, torej izven tega konteksta ni dostopna.
Glede na to, da ShowEdit ni odvisna od ostale vsebine dataUpdate, je najlažja rešitev, da jo definiraš posebej. Torej namesto:
function dataUpdate(mode) { 
  ...
  var ShowEdit = function(...) {}
}
naredi:
function dataUpdate(mode) {
  ...
}
function ShowEdit(...) {
  ...
}
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)

Housy ::

Hvala frudi, dela sedaj :)

gnomee ::

Pa tukaj pri id in name imaš verjetno napako - encodeURI.

var url = "stranke.php";
                 
    if(mode == "update") {
                 
        var parameters = "id=" + enodeURI(document.getElementById("txtID").value) +
                         "&name=" + enodeURI(document.getElementById("txtName").value) +
                         "&email=" + encodeURI(document.getElementById("txtEmail").value) +
                         "&country=" + encodeURI(document.getElementById("txtCountry").value) +
                         "&mode=" + mode;

Zgodovina sprememb…

  • spremenil: gnomee ()

Housy ::

Sem videl ja, ampak sem pozabil tukaj napisat. Hvala, da si napisal :)

gnomee ::

Malenkost :)

Zgodovina sprememb…

  • spremenil: gnomee ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Jquery

Oddelek: Izdelava spletišč
151617 (1341) mk818764
»

PHP include(); problem

Oddelek: Programiranje
10916 (705) DuleKrtola
»

jquery in div-i (strani: 1 2 )

Oddelek: Izdelava spletišč
8710405 (9143) lisjak
»

AJAX neznana težava

Oddelek: Programiranje
81112 (906) luksorzi
»

[php-html] začetniški problemi

Oddelek: Programiranje
301428 (1141) Ziga Dolhar

Več podobnih tem