Я пишу регистрационную форму, я отправляю информацию пользователя через POST на PHP, который ищет в БД. Я бы хотел, чтобы PHP возвращал значение ok или неправильное значение js, и я не понимаю, как это сделать. Здесь мои js:
ui.onClick_regsubmit=function()
{
var fname=document.getElementById('fname').value;
var lname=document.getElementById('lname').value;
var password=document.getElementById('password').value;
var mail=document.getElementById('mail').value;
var affiliation=document.getElementById('affiliation').value;
var data = new FormData();
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
data.append("fname",fname);
data.append("lname",lname);
data.append("password",password);
data.append("mail",mail);
data.append("affiliation",affiliation);
xhr.open( 'post', 'PHP/registration.php', false );
xhr.send(data);
window.alert(affiliation);
}
И php:
<?php
mysql_connect('localhost','root','') or die('Cannot connect mysql server');
mysql_select_db('ChemAlive_login') or die('cannot connect database');
$lname=$_POST['lname'];
$fname=$_POST['fname'];
$password=$_POST['password'];
$mail=$_POST['mail'];
$affiliation=$_POST['affiliation'];
$q=mysql_query("select * from login where mail='".$mail."' ") or die(mysql_error());
$n=mysql_fetch_row($q);
if($n>0)
{
$q=mysql_query("select password from login where mail='".$mail."' ");
$pp=mysql_fetch_row($q);
if($pp[0]=$password) echo "ok";
else echo "wrong";
}
else
{ $insert=mysql_query("insert into login values('".$fname."','".$lname."','".$mail."','".$password."','".$affiliation."')") or die(mysql_error());}
?>
Я хотел бы вернуться к js, это нормально или неправильно. Как это сделать?
xhr.onload=function()
{
if (xhr.status==200)
{
alert(xhr.response);
}else
{
alert("unknown server error");
}
}
будет лучше, если сервер отправит код ответа, а javascript перенесет этот код в текст. Например:
onload=function()
{
switch(xhr.response)
{
case "0":{alert("unknown error")};break;
case "1":{alert("email is already used")};break;
...
}
}
Я думаю, что это понятно
Если вы хотите вернуться либо нормально, либо неправильно к JavaScript для обработки, вы можете сделать что-то подобное на странице registration.php:
$q=mysql_query("select password from login where mail='".$mail."' ");
$pp=mysql_fetch_row($q);
if($pp[0]=$password){
header('Content-Type: application/json');
echo json_encode(array('password' => 'ok'));
}else{
header('Content-Type: application/json');
echo json_encode(array('password' => 'wrong'));
}
Я не полностью тестировал это, но идея состоит в том, чтобы установить заголовок для возврата json и затем отправить ему строку JSON.
Имеет ли это смысл?
Как я уже сказал в своем комментарии ниже, я использовал только jQuery для AJAX. Но вот кое-что из того, что я знаю о XMLHttpRequest, и о том, как вы будете проверять, что вы получите.
Вы можете настроить прослушиватель, когда вы получите ответ назад onreadystatechange
а затем поместите ответ в переменную var pass = xhr.response
а затем просто выведите текст в поле alert
например alert(pass.password)
.
if (xhr.onreadystatechange === 4 && xhr.status === 200){
var pass = xhr.response;
//should output either ok or wrong
alert(pass.password);
}
Узнайте больше о XMLHttpRequest здесь
Дай мне знать, если это работает.
У меня нет комментариев для комментариев, или я бы попросил подробности, но если вы можете рассмотреть возможность использования ajax, он может выглядеть примерно так:
PHP:
$doit = //your query;
if($doit){
$youdid = 'ok';
}
else{
exit('1');
}
ЯШ:
$(document).ready(function () {
var foo = $("#formfield")val();
$.ajax({
"foo":foo;
type: 'POST',
url: 'some.php',
success: function(responseText) {
if(responseText == "1") {
alert("Leave instantly");
};
}
else {
alert("One of us");
}
success: function (json) { alert(json.password); },
Я мог бы привести пример полного запроса jQuery ajax, если это будет полезно? api.jquery.com/jquery.ajax