2016-10-30 12 views
0

所以,這可能是一個愚蠢的問題,但如果我得到一個迴應與AJAX是否有可能在php文件中執行頭功能?在我的情況下,我有一個登錄表單,它通過AJAX(避免重新加載頁面)從PHP腳本(由我進行測試的硬編碼的自定義錯誤編號)中獲取錯誤代碼並用JS警告相關消息,但是如果用戶名和密碼是正確的,我想創建一個PHP cookie並做一個重定向。不過,我認爲AJAX只允許獲取數據,對吧?標題PHP不工作後,從Javascript的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; 
    } 
} 

請對不起,如果這個問題甚至沒有意義的,但我不能」找到一個解決方案。提前致謝!

編輯:我沒有包括代碼的其餘部分,以避免複雜的東西,但如果你需要它給予anwser我會馬上添加它! (:

回答

0

你是對的,你不能這樣混合,php會馬上執行,因爲它沒有javascript的知識,並且會在運行時被服務器解釋,而js將會由瀏覽器解釋

一個可能的解決方案是使用js設置一個cookie,並使用js重定向。或者您可以讓登錄請求服務器在登錄請求成功並設置js時設置cookie在服務器獲得成功響應後重定向

+0

因此,獲得成功的代碼時,重定向與JS,右前設置的PHP腳本餅乾迴應響應代碼? –

+0

不完全。你基本上不能以我想要基於ajax請求的方式來執行任何條件PHP。一旦它在JavaScript的手中,PHP已經全部運行。 (這是假設所有代碼都在同一個文件中) –

+0

因此,我在發送成功響應代碼之前嘗試從PHP腳本設置co​​okie,並且它的工作原因是它創建了cookie,然後我重定向了JS!謝謝!還有最後一個問題,我只能在cookie上存儲用戶名,然後根據用戶名顯示數據(使用用戶名從數據庫中取出代碼),還是不安全?用戶是否可以訪問cookie,以便他們使用用戶名創建一個錯誤的cookie,並且他們可以訪問該用戶的所有數據? –

0

你不能這樣做,因爲ajax請求在支持的進程中返回並返回特定的響應,並且如果你想存儲cookie S和重定向那麼如果Ajax響應滿足您的重定向狀態,你應該這樣做在JavaScript方面,而你得到的迴應成功

$.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({ 
    type: 'POST', 
    url: 'validate.php', 
    data: $this.serialize(), 
    success: function(response) { 
     var responseCode = parseInt(response); 
     alert(codes[responseCode]); 
     window.location="%LINK HERE%"; 
    } 
}); 

這是一種諷刺你使用ajax來避免加載頁面,但是你仍然會在另一個頁面中重定向。 JSON格式

0

測試發送數據:

的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]); 
    } 
}