我一直试图解决这个问题,但没有运气。
我试图进行ajax调用,以便在用户注册时,它会检查服务器以查看是否已经使用该用户名。
在文件/home/myname/public_html/final/js/checkusername.js
中$(function(){
var x_timer;
$("#Signup_username").keyup(function (e) {
//document.write( "HELLO");
clearTimeout(x_timer);
var user_name = $(this).val();
x_timer = setTimeout( function()
{ check_username_ajax(user_name); }
, 1000); //the function defined in setTimeout is executed after a time delay of 1000 ms
});
function check_username_ajax(username) {
$.ajax({
url: '/home/myname/public_html/final/php/usernamecheck.php',
type: "POST",
data: {'username':username},
success: function(){
$('#result').html(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
})
}
});
这是文件usernamecheck.php:
<?php
require_once '/home/myname/public_html/final/db_connect.php';
if(isset($_POST["username"]))
{
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
$username = filter_var($_POST["username"], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH);
$statement = $mysqli->prepare("SELECT userid FROM USER WHERE userid=?");
$statement->bind_param('s', $username);
$statement->execute();
$statement->bind_result($username);
if($statement->fetch()){
echo('username is not available');
}else{
echo('username is available');
}
}
?>
我一直收到错误:未找到消息。老实说,我不知所措。一切正常,直到我进行ajax调用。请帮忙
答案 0 :(得分:1)
你不应该包括一切。相对于您的域名进行更改:
url: '/final/php/usernamecheck.php'
您使用完整的物理路径在服务器端包含该文件是可以的。但AJAX是在客户端执行的,它看到了域和路径格式。因此,您必须提供相对于您的URL的路径。如果网址如下:
http://localhost/final/php/usernamecheck.php'
然后解决方法是更改URL。
答案 1 :(得分:1)
您的方法存在3个明显的问题:
第一个是安全问题,如果用户停止请求,他可能会对数据进行维护,并通过这样做“用户枚举”,基本上映射系统中的所有用户名 - 一定要保护它(限制金额)有时这个请求可以来自一个实体 - 当然是在服务器端。)
其次,您正在从相对路径寻址URL,使其成为@PraveenKumar建议的绝对路径,仅在Javascript端。
第三,出于调试目的,不是在不匹配的http标头上应用die()
,而是返回任意内容,您将更容易理解问题是存在于那里还是在其他部分。
如果您遇到任何问题,请随时发表评论, 欢呼声。