我无法弄清楚我的代码出了什么问题,但是如果我使用以下代码调用ajax:
阿贾克斯.js:
function ajaxObj(meth, url){
var x = new XMLHttpRequest();
x.open(meth, url, true);
x.setRequestHeader("Content-type", "application/x-www_form-urlencoded");
return x;
}
function ajaxReturn(x){
if(x.readyState == 4 && x.status == 200){
return true;
}
}
注册.php
function checkusername(){
var u = _("username").value;
if( u != ""){
_("usernamestatus").innerHTML = "checking...";
var ajax = ajaxObj("POST", "signup.php");
ajax.onreadystatechange = function(){
if(ajaxReturn(ajax) == true){
_("usernamestatus").innerHTML = ajax.responseText;
}
}
ajax.send("usernamecheck="+u);
}
}
我正在调用的PHP代码在注册中如下.php:
<?php
//ajax calls usernamecheck
if(isset($_POST["usernamecheck"])){
include_once("php_includes/db_conx.php");
$username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']);
$sql = "SELECT id FROM users WHERE username = '$username' LIMIT 1";
$query = mysqli_query($db_conx, $sql);
$uname_check = mysqli_num_rows($query);
if(strlen($username) < 3 || strlen($username) > 16) {
echo '<strong style = "color:#F00;">3 - 16 characters please</strong>';
exit();
}
if(is_numeric($username[0])){
echo '<strong style = "color:#F00;">Username must begin with a letter!</strong>';
exit();
}
if($uname_check < 1){
echo '<strong style = "color:#09900;">' . $username . ' is OK</strong>';
exit();
} else {
echo '<strong style = "color:#F00;">' . $username . ' is taken</strong>';
exit();
}
}
?>
如您所见,这只是对注册表单中用户名的检查。
函数_(x)
是按 ID 获取元素。
我得到完整的 HTML 代码作为响应,而不是回声。
如果我使用以下:
<?php
//ajax calls usernamecheck
if(isset($_POST["usernamecheck"])){
echo 'test';
}
然后它返回测试 + 完整的 HTML。
我做错了什么?
您应该只在 AJAX 后端调用结束时使用一次exit()
,以便脚本将终止,并且不会向浏览器发送任何其他内容。 例如,
<?php
if(isset($_POST["usernamecheck"])){
echo 'test'; // or whatever complex logic should be here
exit();
}
会做这个伎俩。
哦,上帝为什么有正确的答案。这正是"x-www_form-urlencoded"中的错别字,应该是"x-www-form-urlencoded"。