KDawg44 wrot:
KDawg44 wrote:
My responseXML is always null on my AJAX call. When I browse directly
to the PHP script I am calling, the XML file shows up just fine.
What is the Content-Type header of the response? It should be "text/xml"
and the document should validate as valid XML.
[...]
The content type is text/xml.
*Are* *you* *really* *really* *sure*? [psf 1.1]
See below.
Note: The "document tree" that was meant here is the automagically indented
syntax-highlighted source code in Gecko-based UAs. If it is only plaintext
there, the Content-Type header of the response does not fit. MSHTML ignores
the Content-Type header and *always* displays the document tree (as it
regards it XML) if it sees ` said:
Also, it works perfect in IE 7 but is not working in firefox
(which is disheartening and confusing... I am used to that being
the other way around....
).
[...]
[...]
PHP Script on Server Side
<?php
header('Content-Type: text/xml');
You should use spaces for indentation (at least when posting your code),
not tabs. And you should include the encoding declaration as well.
[...]
$xmlDoc = "<?xml version='1.0' encoding='UTF-8'?><XMLData>";
Since there is nothing to expand for PHP here, it should be the other way
around:
$xmlDoc = ' said:
$result = verifyLogin($username, $pw);
echo $xmlDoc . $result . "</XMLData>";
echo $xmlDoc . $result . '</XMLData>';
BTW, why the uppercase? Note that XML is case-sensitive.
function login() {
var username = document.loginForm.username.value;
var password = document.loginForm.password.value;
var username = document.forms["loginForm"].elements["username"]..value;
var password = document.forms["loginForm"].elements["password"]..value;
Better:
function login(f)
{
var es = f.elements;
if (es)
{
var username = es["username"].value;
var password = es["password"].value;
// ...
return false;
}
return true;
}
<form action="..." onsubmit="return login(this)">
...
<input type="submit" ...>
said:
xmlHttp.onreadystatechange=function() {
if(xmlHttp.readyState==4) {
readyState == 4 does not mean the request was successful; only that the
response has been received completely. Therefore, it should be
if (xmlHttp.readyState==4 && (/^(20)?0$/.test(xmlHttp.status))
{
(Status `0' can occur when this code is applied on file:// URIs.)
var xmlDoc = xmlHttp.responseXML.documentElement; <---- CULPRIT
Works fine in IE, get a 'xmlHttp.responseXML is null' error in FF 3
Your inline comments suck.
Anyhow, WFM in Fx 3.0.1 on WinXP SP3. It did not work here at first because
in PHP I made the typo
header('Content-Type', 'text/xml');
when it must be
header('Content-Type: text/xml');
Also, note that PHP's header() function must be called before any other
output is sent or the call will be silently ignored. Call
error_reporting(E_ALL); in PHP before the header() call to see possible
warnings about that.
if (xmlDoc.getElementsByTagName("login")
[0].childNodes[0].nodeValue == "true") {
textContent or XPath strikes me as being more efficient and less error-prone
here:
if (xmlDoc.getElementsByTagName("login")[0].textContent === "true")
or
if (xmlDoc.evaluate('//login/text()="true"', xmlDoc, null, 0, null)
.booleanValue)
But using JSON instead of XML would probably be even more efficient and
compatible: said:
window.location="main.php"; <---- THIS IS NOT WORKING IN IE
THOUGH, no error console though.....
[...]
}
}
}
xmlHttp.overrideMimeType("text/xml"); <-- TRIED WITH AND WITHOUT
THIS IN FF, SAME PROBLEM
WFM if PHP's header() was not called but XHR's overrideMimeType() was.
xmlHttp.open("GET","app/verifyLogin.php?un=" +escape(username) +
"&pw=" + escape(password),true);
Prefer encodeURIComponent() over escape(). The latter is obsolete and
insufficient, use it only as a fallback.
Output on Direct Call to Server:
And if I do a 'View Source' on that Output:
<?xml version='1.0' encoding='UTF-8'?><XMLData><login>true</login></
XMLData>
Neither does mean the media type declaration was correct, though.
Try e.g. "View Page Info" or LiveHTTPHeaders to be sure:
<
https://addons.mozilla.org/addon/3829>
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee