2016-10-06 25 views
-2

私のウェブサイトには、なんとなく不思議な問題があります。それを整理しようとしてから2日が過ぎた後、私はまだ何が間違っているかを見つけ出すことができませんでした。Ajaxは私のウェブサイト全体でぼんやりと働いていました

最近、私のajaxコードが正常に動作していないことがわかりました。それが魅力のように働く前に。 PHP

function emptyElement(x){ 
    _(x).innerHTML = ""; 
} 
function login(){ 
    var e = _("email").value; 
    var p = _("password").value; 
    if(e == "" || p == ""){ 
     _("status").innerHTML = 'Please fill out all the form data.'; 
    } else { 
     _("loginbtn").style.display = "none"; 
     _("status").innerHTML = 'Loading...'; 
     var ajax = ajaxObj("POST", "login.php"); 
     ajax.onreadystatechange = function() { 
      if(ajaxReturn(ajax) == true) { 
       if(ajax.responseText == "login_failed"){ 
        _("status").innerHTML = 'Login unscuccessful'; 
        _("loginbtn").style.display = "block"; 
       } else { 
        window.location = "xxxx"; 
       } 
      } 
     } 
     ajax.send("e="+e+"&p="+p); 
    } 
} 

次のとおりです:

if(isset($_POST["e"])){ 
    include_once("php_includes/db_conx.php"); 
    $e = mysqli_real_escape_string($db_conx, $_POST['e']); 
    $e = strtolower($e); 
    $p = md5($_POST['p']); 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 
    if($e == "" || $p == ""){ 
     echo "login_failed"; 
     exit(); 
    } else { 
     $query = mysqli_query($db_conx,"SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1"); 
     $row = mysqli_fetch_row($query); 
     $db_id = $row[0]; 
     $db_username = $row[1]; 
     $db_pass_str = $row[2]; 
     if($p != $db_pass_str){ 
      echo "login_failed"; 
      exit(); 
     } else { 
      //set cookies and log user in 
     } 
    } 
    exit(); 
} 

が、フォーム

は、次のとおりです:

<form class="registration-form" name="signupform" onsubmit="return false;"> 
    <input type="text" onfocus="emptyElement('status')" placeholder="Email" id="email" autofocus> 
    <input type="password" onfocus="emptyElement('status')" placeholder="Password" id="password"> 
    <button type="submit" id="loginbtn" onclick="login()" >Log in!</button> 
    <div id="status"></div> 
</form> 

はJSに従うここに私のオンラインコミュニティからログインスクリプトの例です。フォームのphpが動作していて、すべての値が正しい場合、ユーザーはログインしていますが、 ajaxは、上記のコードのように、ステータスやローディングメッセージを表示していません。

スクリプト以外で変更されたものはありません。以前のようにページの上部にはまだajax.jsjqueryが含まれています。

これは単なる一例です。私が人々を登録させるために使用するフォームは、このウェブサイトと同じで、私のウェブサイトの他のajaxフォームと同じように、同じ問題を抱えています。

何が問題なのですか?

+2

コンソールからのヒント? –

+0

ChromeでJavaScriptコンソールを開くと(F12キーを押す)、ページの表示時にエラーが表示されますか?あなたのJSの小さな構文エラーは、それがすべて一緒に働くのを止めることができます。 – Jaco

+0

コンソールをチェックすると、そこに何かがあるかもしれません。 – Majid

答えて

1

活用のJSONをJavaScriptにサーバーからデータを取得する(AJAX)

if(isset($_POST["e"])){ 
    include_once("php_includes/db_conx.php"); 
    $e = mysqli_real_escape_string($db_conx, $_POST['e']); 
    $e = strtolower($e); 
    $p = md5($_POST['p']); 
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR')); 

    $json['success'] = true; 

    if($e == "" || $p == ""){ 
     $json['success'] = false; 
    } else { 
     $query = mysqli_query($db_conx,"SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1"); 
     $row = mysqli_fetch_row($query); 
     $db_id = $row[0]; 
     $db_username = $row[1]; 
     $db_pass_str = $row[2]; 
     if($p != $db_pass_str){ 
      $json['success'] = false; 
     } else { 
      //set cookies and log user in 
     } 
    } 
    // display your return data as json 
    echo json_encode($json); 
} 

if (this.readyState == 4 && this.status == 200) { 

} 

にごonreadystatechangeに関数の内部を包む

if(ajaxReturn(ajax) == true) { 
} 
であるあなたの条件を削除します

あなたのjsファイルはこのようになりました

function emptyElement(x){ 
    _(x).innerHTML = ""; 
} 
function login(){ 
    var e = _("email").value; 
    var p = _("password").value; 
    if(e == "" || p == ""){ 
     _("status").innerHTML = 'Please fill out all the form data.'; 
    } else { 
     _("loginbtn").style.display = "none"; 
     _("status").innerHTML = 'Loading...'; 
     var ajax = ajaxObj("POST", "login.php"); 
     ajax.onreadystatechange = function() { 
      // when ajax is now okay and request finished and response is ready 
      if (this.readyState == 4 && this.status == 200) { 
       var result = JSON.parse(this.responseText); 

       // debugging purpose display response 
       console.log(result); 

       if(result.success == true){ 
        _("status").innerHTML = 'Login unscuccessful'; 
        _("loginbtn").style.display = "block"; 
       } else { 
        window.location = "xxxx"; 
       } 
      } 
     } 
     ajax.send("e="+e+"&p="+p); 
    } 
} 
+0

コンソールでこのエラーが表示されます。Uncaught SyntaxError:Unexpected 0のJSONのトークンu –

+0

try console.log(this.responseText); console.log(this.responseText)をconsole.log(this.responseText)に置き換えたときの結果は – Beginner

+0

となります。私は同じ未知の構文エラーを返します。 –

関連する問題