2016-10-30 18 views
0

これはおそらく疑問な質問ですが、AJAXで応答を受け取った場合、phpファイルでヘッダー機能を実行できますか?ヘッダーPHPがJavaScriptからのAJAX呼び出しの後に動作しない

私の場合、AJAX(ページの再読み込みを避けるため)を介してPHPスクリプト(カスタムエラー番号がテスト用にハードコードされています)からエラーコードを取得し、JSとの関連メッセージを警告するログインフォームがありますユーザー名とパスワードが正しいです、私はPHPのクッキーを作成し、リダイレクトしたいです。しかし、私はAJAXはデータを取得することしか許さないと思いますよね?

これは私のコードです:

JS

$.ajax({ 
    type: 'POST', 
    url: 'validate.php', 
    data: $this.serialize(), 
    success: function(response) { 
     var responseCode = parseInt(response); 
     alert(codes[responseCode]); 
    } 
}); 

PHP

if(empty($user)){ 
    echo 901; 
}else{ 
    if(hash_equals($user->hash, crypt($password, $user->hash))){ 
     setCookie(etc...); //this is 
     header('admin.php'); //what is not executing because I'm using AJAX 
    }else{ 
     echo 902; 
    } 
} 

質問は、まったく意味がありませんが、私は「couldn申し訳ありませんしてください場合解決策を見つける。前もって感謝します!

編集:複雑なものを避けるためにコードの残りの部分は含めませんでしたが、アンサーを与えるために必要な場合はすぐに追加します。 (:

答えて

0

phpはjavascriptについての知識がなく、実行時にサーバによって解釈されるため、すぐに実行されますが、jsは実行時に実行されます。

jsでクッキーを設定し、jsでリダイレクトするか、ログイン要求を受け取ったサーバーにログイン要求が成功したときにクッキーを設定させてjs doサーバーからの応答が成功した後のリダイレクト

+0

ので、成功コードを取得する際にJSでリダイレクトし、そして右の前にPHPスクリプトにクッキーを設定します応答コードをエコーし​​ますか? –

+0

基本的には、条件付きのPHPを、私があなたがajaxリクエストに基づいていたいと思うようにすることはできません。 JavaScriptが手に入ると、PHPはすでに動いています。 (これはすべてのコードが同じファイル内にあることを前提としています) –

+0

成功レスポンスコードを送る前にPHPスクリプトからクッキーを設定しようとしましたが、クッキーを作成してJSでリダイレクトしました。ありがとう!最後の質問ですが、ユーザー名をCookieに保存してから、ユーザー名(データベースからコードを取り出してユーザー名を使用して)に基づいてデータを表示することはできますか、それとも安全でないのですか?ユーザーはCookieにアクセスして、ユーザー名で間違ったCookieを作成し、そのユーザーからのすべてのデータにアクセスできますか? –

0

ajaxリクエスト処理がサポートされているため、特定のレスポンスを返すので、クッキーを保存したいsおよびあなたが

$.ajax({ 
    type: 'POST', 
    url: 'validate.php', 
    data: $this.serialize(), 
    success: function(response) { 
     var responseCode = parseInt(response); 
     alert(codes[responseCode]); 

     window.location = "admin.php"; 
    } 
}); 

if(empty($user)){ 
    setCookie(etc...); //this is 
    echo 901; 
}else{ 
    if(hash_equals($user->hash, crypt($password, $user->hash))){ 
     echo response// what every you want to store 
    }else{ 
     echo 902; 
    } 
} 
0

応答成功を得る一方で、あなたはAjaxのレスポンスがリダイレクトのためのあなたの条件を満たしている場合、あなたは以下を使用することができますjavascriptの側でそれを行う必要がありますリダイレクト:

 
$.ajax({ 
    type: 'POST', 
    url: 'validate.php', 
    data: $this.serialize(), 
    success: function(response) { 
     var responseCode = parseInt(response); 
     alert(codes[responseCode]); 
     window.location="%LINK HERE%"; 
    } 
}); 

それは一種の皮肉ページの読み込みを避けるためにajaxを使用しますが、とにかく別のページにリダイレクトされます。

0

JSON形式でデータを送信テスト:

Javascriptを

$.ajax({ 
    type: 'POST', 
    url: 'validate.php', 
    data: $this.serialize(), 
    success: function(response) { 
     if(response.success){ 
     window.location="%LINK HERE%"; 
     }else{ 
     var responseCode = parseInt(response.code); 
     alert(responseCode); 
     ... 
     } 
    } 
}); 

PHP

header("Content-type: application/json"); 

if(empty($user)){ 
    echo json_encode(['success' => false, 'code' => 901]); 
}else{ 
    if(hash_equals($user->hash, crypt($password, $user->hash))){ 
     echo json_encode(['success' => true, 'data' => response]); 
    }else{ 
     echo json_encode(['success' => false, 'code' => 902]); 
    } 
} 
関連する問題