我试图让下面的代码调用PHP文件,并显示返回的数据。在Firefox中,警报显示为空白,在IE中它有时显示但几乎没有显示。 PHP脚本是一个简单的echo "hello";
。
function make_request()
{
try
{
// Firefox, Opera 8.0+, Safari
httpxml=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
httpxml=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
httpxml=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
}
function check_login(username, password)
{
var httpRequest;
make_request()
var parameters = 'username=' + username.value + '&password=' + password.value;
httpxml.onreadystatechange = stateck;
httpxml.open('POST', 'login.php', true);
httpxml.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");
httpxml.setRequestHeader('Content-Length', parameters.length);
httpxml.send(parameters);
function stateck()
{
if(httpxml.readyState==4)
{
alert(httpxml.responseText);
}
}
}
<table class="form" id="form" cellpadding="10" >
<form id="signup_form" name="form" method="post" />
<tr>
<td>Username</td>
<td><input type="text" name="username" id="username" size="26" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" id="password" size="26"/></td>
</tr>
<td>
<input type="submit" name="button" id="button" value="Submit" onClick="check_login(username, password);"/>
</td>
</form>
</table>
</div>
由于
答案 0 :(得分:2)
一些注意事项我无法用于评论(其中一些应该对您的XMLHttpRequest调用成功没有影响;其他可能 - 所以修复所有其中):
Nothing不会检查 make_request()的返回值,因此return false;
有点无意义(只是...返回)。为什么不将 httpxml 设为局部变量而不是隐式全局变量,并返回?然后使用返回值向调用者指示函数是否成功...
check_login()中的局部变量 httpRequest 从不使用。也许您打算为它分配 make_request()的返回值(并且...... make_request()实际上返回一些有用的东西?)
您实际上并未对用户名或密码的值进行网址编码。 (将它们传递给encodeURIComponent()
以轻松完成此任务)
您不需要明确设置Content-Length
标头。 (如果你弄错了,这很容易导致请求失败)
最糟糕的脚本错误:您没有取消提交按钮的默认行为。从 check_login()返回false,并将您的事件处理程序更改为onclick="return check_login(username, password);
您已使<form>
代码自动关闭(<form ... />
)。并包含一个结束</form>
标记。这不太可能是你想要的(甚至不太可能表现出可靠的跨浏览器)
您的最后一个单元格(<td>
)是在任何行(<tr>
)之外定义的。
关闭一个从未打开的<div>
。