2011-12-28 40 views
0

jQuery的區分:從PHP返回表單提交的結果爲JavaScript,成功和失敗

$("#register-form").submit(function(event) { 
event.preventDefault(); 
    $.post("./register.php", { 
     username: $("#username").val(), 
     password: $("#password").val(), 
     passwordtwo: $("#passwordtwo").val(), 
     email: $("#email").val() 
    }, 
    function(response) { 
     $("#errors").html(response); 
     $("#errors").slideDown("slow"); 
    }); 
}); 

這完美的作品,並顯示我返回錯誤。但如果表格通過所有檢查,我會遇到問題。

if ($error) { 
    echo $error; // returns errors in form 
} else { 
    // Password Hash & Salt functions are here 
    // sets a cookie to log them in here 
     header("Location: " . getenv("HTTP_REFERER")); // the problem 
} 

因爲我目前的jQuery的功能,響應將返回HTTP_REFERER所以它加載<div id="errors"></div>我裏面的誰前一頁。

如果通過所有檢查,是否有某種成功參數或某種方式來執行其他操作?

+0

http://stackoverflow.com/questions/2031168/jquery-ajax-error-handling – 2011-12-28 20:46:34

回答

2

使用PHP的一部分JSON

if ($error) { 
     echo '{"error":"$error", "success":false}'; // returns errors in form 
    } else { 
     // Password Hash & Salt functions are here 
     // sets a cookie to log them in here 

     echo '{"error":"", "success":true}'; 
    } 

並修改Javascript來處理json。

$("#register-form").submit(function(event) { 
event.preventDefault(); 
    $.post("./register.php", { 
     username: $("#username").val(), 
     password: $("#password").val(), 
     passwordtwo: $("#passwordtwo").val(), 
     email: $("#email").val() 
    }, 
    function(response) { 
     if(!response.success) { alert("error:" + response.error);} 
      else { window.location.reload(); } 
    }, 
    'json' 
    ); // add json type 
}); 
+0

感謝您的這一點。但它是否應該輸出''{「error」:「$ error」,「success」:false}''作爲字符串? – Aaron 2011-12-29 09:59:27

+0

@Aaron是的。一個輸出示例是'{「error」:「用戶名密碼對不匹配」,「成功」:false}' – 2011-12-29 13:35:30

+0

非常好,這個工作很好。 – Aaron 2011-12-29 17:54:56

2

如果您發出ajax請求,那麼您必須在javascript內重定向。所以,你可以做

$("#register-form").submit(function(event) { 
event.preventDefault(); 
    $.post("./register.php", { 
     username: $("#username").val(), 
     password: $("#password").val(), 
     passwordtwo: $("#passwordtwo").val(), 
     email: $("#email").val() 
    }, 
    function(response) { 
     if (response = '') { window.location.reload(); } 
     else { 
      $("#errors").html(response); 
      $("#errors").slideDown("slow"); 
     } 
    }); 
}); 

和回聲沒有什麼出沒有錯誤 如果($錯誤){回聲$誤差; }

更好的方法是使用JSON代替。在返回錯誤{ error: 'Error message' }和其他{ success: true }

然後在您檢查JavaScript端是response.error存在

更多信息:http://www.json.org/

+0

有一個在'location'對象沒有'刷新()'方法。它的'reload()'。 – 2011-12-28 20:54:32

+0

對不起,mybad。修復它:) – Kristian 2011-12-28 21:19:51

1

Shiplu建議的PHP代碼是完美的。在ajax調用中使用數據類型:json。

$("#register-form").submit(function(event) { event.preventDefault(); 
    $.post("./register.php", { 
     username: $("#username").val(), 
     password: $("#password").val(), 
     passwordtwo: $("#passwordtwo").val(), 
     email: $("#email").val() 
    }, 
    function(response) { 
     if (response.success.toString() = 'true') { window.location.reload(); } 
     else { 
      $("#errors").html(response.error); 
      $("#errors").slideDown("slow"); 
     } 
    }, "json"); }); 
相關問題