【问题标题】:PHP & AJAX Getting response but not loading new pagePHP & AJAX 得到响应但不加载新页面
【发布时间】:2013-12-14 19:17:58
【问题描述】:

您好,我正在使用 AJAX 将用户名和密码传递给 php 页面,一旦识别出用户名和密码存在,我想加载页面 main.html。

在我提交表单的那一刻,我得到了真正的响应,这显示在错误消息标签位置的表单上方,但它没有加载 main.html 页面。

我是新手,所以不太确定哪里出了问题,我已经在 chrome web 开发人员控制台中运行了代码,但没有显示任何问题,希望有人能指出我正确的方向。

页面网址:http://goo.gl/7QGrnr

HTML 代码

 <label id="errorMessage"></label>
 <form  name="login" class="login">
   <input name="username" type="text" placeholder="Username"/>
   <input name="password" type="text" placeholder="Password"/>
   <input type="submit" name="login" class="login" value="Login" id="orange"/>
 </form>

AJAX 代码

$(document).ready(function(){
  $('form.login').submit(function () {
    var username = $("[name='username']").val();
    var password = $("[name='password']").val()
    // ...
    $.ajax({
  type: "POST",
  url: "login.php",
  data: "username="+ username +"& password="+ password,
  success: function(response){
    if(response == 'true') {
          window.location.href='main.html';
        }
        else {
          $("#errorMessage").html(response);
        }   
      }
    });
return false;
  });
});

PHP 代码

           $username = mysql_real_escape_string($_POST['username']);
           $password = md5(mysql_real_escape_string($_POST['password']));

           if(!empty($username) && !empty($password))
            {
           $result = mysql_query("SELECT * FROM users WHERE username='$username' and  password ='5d503cf3064551d1bae24d5e2aaedbd9'");
           $num_rows01 = mysql_num_rows($result);
            if($num_rows01 === 1)
            {
              echo 'true';
            }
              else
            {
              echo 'false';
            }
          }

【问题讨论】:

  • 如果errorMessage 中显示了某些内容,那么肯定不是true。 console.log(response) 并检查您收到的内容
  • MySQL 函数已弃用,您应该使用 mysqli 或 PDO。 MD5 几乎不再值得使用,您应该根据您的 PHP 版本使用更现代的散列函数,但请查看 Bcrypt。现在您的问题是,如果您看到错误消息 div,那么您的响应不是“true”,console.log(response);在你的成功处理程序中找出发生了什么。您的 PHP 中可能存在解析错误,或者您需要在 Ajax 调用中设置 dataType: "text"。
  • 建议在您的 AJAX 调用中添加 error 部分。这样,您可以在某种程度上查看您的代码可能出了什么问题。在success 函数之后使用以下代码:error: function(xhr, status, error) { console.log(error); } 让我知道你在这里遇到什么错误。
  • 你的意思是像这样成功吗:function(response){ error: function(xhr, status, error) { console.log(error); } if(response == 'true')

标签: php html ajax


【解决方案1】:

这是一个直截了当的问题,只要正确调试 JS,就可以轻松解决。让我教你一个简单的技巧。在您的 JS 中,在所有重要位置插入断点。代码在每个断点处停止,然后您可以看到状态。在这种情况下,我们必须确定代码是否进入成功场景。我们插入一个断点如下:

    success: function(response){
 debugger;
             if(response == 'true')
                    {
                         window.location.href='main.html';
                    }
                    else
                    {
                        $("#errorMessage").html(response);
                    }   
            }

如果代码进入成功场景,它应该会触发调试器。然后您可以查看每个变量的状态并立即定位问题。 从长远来看,这个小技巧会帮助你,相信我!

希望这能解决您的问题。

【讨论】:

  • 谢谢,这很方便,当我运行代码时,它会在调试器处停止,然后当我进入下一步时,它会返回单词 true 并停止
  • 所以这意味着如果响应是真的,调试器应该进入 if(response == 'true') 块。一旦它进入那里,它将点击行 window.location.href='main.html';
  • 所以基本上在 php 页面上它只是回显输出并显示单词 true 但没有传递回 javascript,我认为
  • 是的。但这又取决于您的代码。你必须在你的ajax调用中输入一个url。请看是否准确。还要看到ajax调用语法是准确的。
【解决方案2】:

我会使用 jQuery 的而不是 return false

e.preventDefault();

【讨论】:

    【解决方案3】:

    从

    更改 PHP
    echo 'true';
    

    到

    echo json_encode(array('response'=>'true'));
    

    从 Javascript 更改

    function(response){
      if(response == 'true')
      {
        window.location.href='main.html';
      }
    

    到

    function(data){
      if(data.response == 'true')
      {
        window.location.href='main.html';
      }
      else
      {
        $("#errorMessage").html(data.response);
      } 
    

    将 datatype:'json' 添加到 ajax 调用

    $.ajax({
      type: "POST",
      url: "login.php",
      datatype: "json",
      data: "username="+ username +"& password="+ password,
    

    更改数据:"username="+ username +"& password="+ 密码,改为

    data: {'username':username,'password':password},
    

    【讨论】:

    • 感谢我进行了更改,现在它会生成错误 Uncaught Reference Eror: Response is not defined
    • 我认为您仍然需要将 datatype:'json' 添加到您的 ajax 调用中
    • 谢谢,好的,这更有意义,看看其他一些教程,但现在当我点击提交时,我什么也得不到,也不会在控制台中标记错误
    • 添加console.log(data);在控制台看到什么直接在函数下(数据){
    • 什么都没有,我添加了那段代码,但是一旦我按下登录按钮,我什至在控制台中也没有得到任何回报
    【解决方案4】:

    试试

    location.reload();
    

    而不是

     window.location.href='main.html';
    

    【讨论】:

    • 他的脚本没有到达那部分,但即使它是 - 为什么刷新当前页面比重定向到他想要的目的地更好?
    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 2019-08-31
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多