AJAX调用php拒绝工作

时间:2015-12-07 13:50:03

标签: javascript php jquery ajax

我一直试图解决这个问题,但没有运气。

我试图进行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调用。请帮忙

2 个答案:

答案 0 :(得分:1)

你不应该包括一切。相对于您的域名进行更改:

url: '/final/php/usernamecheck.php'

您使用完整的物理路径在服务器端包含该文件是可以的。但AJAX是在客户端执行的,它看到了域和路径格式。因此,您必须提供相对于您的URL的路径。如果网址如下:

http://localhost/final/php/usernamecheck.php'

然后解决方法是更改​​URL。

答案 1 :(得分:1)

您的方法存在3个明显的问题:

第一个是安全问题,如果用户停止请求,他可能会对数据进行维护,并通过这样做“用户枚举”,基本上映射系统中的所有用户名 - 一定要保护它(限制金额)有时这个请求可以来自一个实体 - 当然是在服务器端。)

其次,您正在从相对路径寻址URL,使其成为@PraveenKumar建议的绝对路径,仅在Javascript端。

第三,出于调试目的,不是在不匹配的http标头上应用die(),而是返回任意内容,您将更容易理解问题是存在于那里还是在其他部分。

如果您遇到任何问题,请随时发表评论, 欢呼声。