homepage Welcome to WebmasterWorld Guest from 54.235.36.164
register, free tools, login, search, subscribe, help, library, announcements, recent posts, open posts,
Pubcon Platinum Sponsor
Home / Forums Index / Code, Content, and Presentation / JavaScript and AJAX
Forum Library, Charter, Moderator: open

JavaScript and AJAX Forum

    
JavaScript Problem
jo3y




msg:4080862
 11:22 pm on Feb 15, 2010 (gmt 0)

Hi there! I have been getting into writing JavaScript and PHP, using AJAX techniques. I am running into a problem that I know has to be a simple error or overlook on my part, but I can not figure out what.

Basically I am making a very simple content update that will update a text file on the server, and echo the results to a
<P> element's innerHTML without reloading the page.

Now, on the first click of the form, the technique works. What I can't figure out is, when I click the button again, I get "Message: Object doesn't support this property or method" and it points me directly to the function I am calling with onClick in the XHTML.

If anyone has any insight on this issue it would be very much appreciated!

I'll strip down the code as much as possible.

Here is the XHTML:


// Form
<form>
<textarea id="newContent" rows="4" cols="40"></textarea><br /><br />

<input type="button" value="Change Content" onClick="changeContent()" />
</form>

// P element where contents from PHP are displayed
Show/Load Content:
<p id="showContent" class="spacedText"></p>


Here is the JavaScript:


// Create the Request Object function
function createXMLObject()
{
if (window.XMLHttpRequest)
{
XHRO=new window.XMLHttpRequest();
}
else
{
XHRO=new ActiveXObject("Microsoft.XMLHTTP");
}
textDoc=XHRO;
}

// Push PHP result to P element
function showNewContent()
{
document.getElementById("showContent").innerHTML=textDoc;
}

// This is the function called in the form when clicked
function changeContent()
{
runPHP("changeContent.php");
}

// This calls the PHP
function runPHP(dname)
{
createXMLObject();

changeContent=document.getElementById("newContent").value;
var parameters=("content="+changeContent);
XHRO.open("POST", dname, true);
XHRO.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XHRO.setRequestHeader("Content-length", parameters.length);
XHRO.setRequestHeader("Connection", "close");
XHRO.onreadystatechange = function() {
if(XHRO.readyState == 4 && XHRO.status == 200)
{
textDoc=XHRO.responseText;
showNewContent();
}
}
XHRO.send(parameters);
}


The PHP:


header("Content-Type: text/plain");

// Load file
$textDoc = "content.txt";

// Open file for writing
$handle = fopen($textDoc, "w") or die("Unable to Open File");

// Read the new data into a variable
$contents = $_POST["content"];

// Write the new contents to the file
fwrite($handle, $contents);

// Echo results(also verifies info was correctly received
echo $contents;

// Close the file to finalize changes
fclose($handle);

 

Fotiman




msg:4081342
 3:37 pm on Feb 16, 2010 (gmt 0)

Welcome to WebmasterWorld!

1. onClick is not valid XHTML. In XHTML, all attributes must be lowercase, so it should be onclick instead.

2. Your runPHP function redefines your global changeContent. This is why it's important to use "var" to declare your variables, otherwise they get created in the global scope (which is messy and inefficient). In your runPHP function, add "var" before changeContent=... and that should fix the problem you're seeing.

Side note: You might want to read "Why most of us should NOT use XHTML" [webmasterworld.com]

jo3y




msg:4081352
 4:09 pm on Feb 16, 2010 (gmt 0)

Thank you so much for your help, I will give it a shot. Also, thanks for this site too. I have used it off and on for nearly 6 years or so now. It kicks butt!

As for the var, for some reason I had it backwards. I thought the var declaration would make it a global variable.

Thanks again.

jo3y




msg:4081355
 4:24 pm on Feb 16, 2010 (gmt 0)

Yup that fixed it. I understand now, I used a variable named the same as the function name, so it was getting redefined as a global variable. So one run through was working, but after redefining the changeContent into a variable, causing the second click to attempt to run a variable as a function.

Thanks! I'll give the link you posted a read.

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / JavaScript and AJAX
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About
© Webmaster World 1996-2014 all rights reserved