2015-01-22 5 views
0

JqueryПеренаправление с AJAX

$('#myform').submit(function() 
{ 
     $.ajax(
     { 
      type: "POST", 
      url: 'checkit.php', 
      data: 
      { 
       usernameuser: $("#usernameuser").val(), 
       passworduser: $("#passworduser").val() 
      }, 
      success: function(html) 
      { 
       $(".gonewrong").html(""); 
       $(".gonewrong").show(); 
       $(".gonewrong").append(html); 
      } 
     }); 
    }); 
}); 

ФОРМА ВХОДА

  <form name="loginform" action="checkit.php" method="post" accept-charset="utf-8" id="myform"> 
       <table class="logintable"> 
       <tr class="logintr"><td class="mylabel">Username </td><td class="myinputfield"><input type="text" name="usernameuser" id="usernameuser"/></td></tr> 
       <tr class="logintr"><td class="mylabel">Password </td><td class="myinputfield"><input type="password" name="passworduser" id="passworduser"/></td></tr> 
       <tr class="logintrbutton"><td class="mylabel">&nbsp; </td><td class="mybutton"><input type="submit" value="LOGIN" class="loginbutton" id="loginuser"/></td></tr> 
       <tr><td class="gonewrong" colspan="3"></td></tr> 
       </table> 
      </form> 

CHECKIT.PHP

if ($numUsers>0) 
{ 
    session_start(); 
    $_SESSION['username'] = $username; 
    header("Location: good.php"); 
} 
else 
{ 
    echo 'Incorrect username/password'; 
} 

Если Войти не так все работает отлично, выводится сообщение об ошибке в правой но если логин был успешным, он не перенаправляет меня на good.php в адресной строке браузера, но я вижу эту страницу (good.php) внутри gonewrong.

Я потратил много часов на это и не могу решить проблему.

ответ

2

Вы пытаетесь перенаправить приложение backend, где ajax является вызовом. Вы должны перенаправить на первую страницу, где находится javascript.

PHP: (бэкенд приложение, не может перенаправлять здесь)

if ($numUsers>0) 
{ 
    session_start(); 
    $_SESSION['username'] = $username; 
    // header("Location: good.php"); - this not gonna work 
    // echo success instead: 
    echo 'success'; 
} 
else 
{ 
    echo 'Incorrect username/password'; 
} 

SCRIPT: (титульный лист, сделать перенаправление здесь)

$('#myform').submit(function(e) 
{ 
    e.preventDefault(); 
    $.ajax(
    { 
     type: "POST", 
     url: 'checkit.php', 
     data: 
     { 
      usernameuser: $("#usernameuser").val(), 
      passworduser: $("#passworduser").val() 
     }, 
     success: function(status) 
     { 
      // check if successfully logged in: 
      if('success'==status){ 
       //Success! user is logged in, need to redirect to good.php 
       window.location.href='http://yoursite.com/good.php'; 
      }else{ 
       // Error! user is not logged in, show error message: 
       $(".gonewrong").html(""); 
       $(".gonewrong").show(); 
       $(".gonewrong").append(status); 
      } 
     } 
    }); 
    }); 
}); 
+0

с вашим решением, если логин не был успешным, это echos «Неправильное имя пользователя/пароль» в файле checkit.php, и я хочу его в gonewrong td. Кажется, он пропускает оператор else. – splunk

+0

Не следует. Я отредактировал ответ 4 минуты после того, как написал его. Пробовал? –

+0

Да, я попробовал еще раз, обновив эту страницу, но это так странно, что она не работает. – splunk

1

Почему бы не использовать JavaScript для перенаправления ?

$('#myform').submit(function() 
{ 
     $.ajax(
     { 
      type: "POST", 
      url: 'checkit.php', 
      data: 
      { 
       usernameuser: $("#usernameuser").val(), 
       passworduser: $("#passworduser").val() 
      }, 
      success: function(response) 
      { 
       if (response.length > 0) { 
        $(".gonewrong").html(response); 
        $(".gonewrong").show(); 
       } 
       else { 
        location.href = 'good.php'; // redirect like this 
       } 
      } 
     }); 
    }); 
}); 

Если файл checkit.php напечатал сообщение об ошибке, покажите его; в противном случае перенаправление.

2

Вы не можете перенаправить ответ AJAX, потому что браузер не переходит на страницу. Вместо этого изучите ответ в JavaScript и переадресовывайте оттуда. Что-то вроде этого:

if ($numUsers>0) 
{ 
    session_start(); 
    $_SESSION['username'] = $username; 
    echo 'success'; 
} 
else 
{ 
    echo 'Incorrect username/password'; 
} 

И в JavaScript:

success: function(html) 
{ 
    if (html == 'success') { 
     window.location = 'good.php'; 
    } else { 
     $(".gonewrong").html(""); 
     $(".gonewrong").show(); 
     $(".gonewrong").append(html); 
    } 
} 

Это проверялось, вы можете отлаживать ответ и убедитесь, что он на самом деле соответствует в сравнении строк. Вы также можете сделать еще один шаг и ответить на структурированные данные JSON, что сделает код JavaScript немного менее хрупким.

Но главное, перенаправление, инициированное сервером, работает только на страницах навигации, а не на запросах API (AJAX). В случае использования AJAX «приложение» является клиентским кодом, и ему необходимо выполнить перенаправление.

Смежные вопросы