我无法弄清楚我的代码有什么问题,但如果我用以下代码调用ajax:
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;
}
}
signup.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代码如下所示:signup.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();
}
}
?>
正如您所看到的,只是检查SignUp表单中的用户名。
函数_(x)
正在按ID获取元素。
我得到完整的HTML代码作为响应,而不是回声。
如果我使用以下内容:
<?php
//ajax calls usernamecheck
if(isset($_POST["usernamecheck"])){
echo 'test';
}
然后它返回test + full html。
我做错了什么?
答案 0 :(得分:1)
在AJAX后端调用结束时,您应该只使用exit()
一次,以便脚本终止,并且不会向浏览器发送任何其他内容。如,
<?php
if(isset($_POST["usernamecheck"])){
echo 'test'; // or whatever complex logic should be here
exit();
}
会做到这一点。
答案 1 :(得分:0)
OhGodwhy有正确的答案。 这正是&#34; x-www_form-urlencoded&#34;中的拼写错误。应该是&#34; x-www-form-urlencoded&#34;。