【问题标题】:ajax success function not firingajax成功功能未触发
【发布时间】:2014-02-26 23:21:21
【问题描述】:

我已经制作了一个使用 php、ajax 和 mysql 的登录表单,php 代码似乎工作正常,因为它说当输入用户凭据时,屏幕上会回显一条成功消息。

然而,ajax 应该接受并处理它并打开它未能这样做的 index.php 页面。然而,ajax 确实在一定程度上起作用,因为我的“正在检查...”消息按预期出现。任何帮助将不胜感激。请在下面找到代码。

loginajax.js

function chk_ajax_login_with_php() {
    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;


    var params = "username=" + username + "&password=" + password;
    var url = "login.php";
    $.ajax({
        type: 'POST',
        url: url,
        dataType: 'html',
        data: params,
        beforeSend: function () {
            document.getElementById("status").innerHTML = 'checking...';
        },
        complete: function () {

        },
        success: function (html) {
            if (html == "success") {
                window.location = 'index.php';
            }

        }

    });

}

login.php

<?php

require "header.php"; 

 try 
{
    $connection = mysql_connect("localhost","root", "dbpassword");
    if(!$connection) {   
      die("Database connection failed: " . mysql_error());   
    }   
    $db_select = mysql_select_db("dbname",$connection);   
    if (!$db_select) {   
      die("Database selection failed:: " . mysql_error());   
     }   

   }catch (Exception $e){
     error_log(" DB Error: ".$e->getMessage());
   }

  if($_POST){

     $username=$_POST['username'];
     $password=$_POST['password'];
     $sql = mysql_query("SELECT * FROM usertable WHERE userID ='".$username."' AND  userPass ='".md5($password)."'") or die(mysql_error());
     $res=mysql_num_rows($sql);




 if($res>0){

     $rs_login=mysql_fetch_assoc($sql);
     $uid=$rs_login['user_id'];
     $_SESSION['sess_uid']=$uid;
     echo "success";

  } 

     else{

    echo "invalid username or password";

  }




  }

  ?>

【问题讨论】:

  • 你确定服务器端脚本返回 echo "success";
  • 在login.php 中尝试echo "success";exit;
  • 嗨,是的,我尝试回显成功并显示消息。
  • 但是问题仍然存在,页面没有被 index.php 页面替换。
  • success这个词前后有空格吗?

标签: php mysql sql ajax


【解决方案1】:

你应该调试它!

success: function(html) {
      console.log(html);
      return false;
      //if(html=="success"){
      //window.location = 'index.php';
      //}
 }

在这里,您将确定因为 console.log 而触发了成功,并且您会看到 login.php 输出。

【讨论】:

  • 我刚刚尝试了你的建议,似乎在使用调试解决方案时仍然出现成功消息,这是在 php.ini 中定义的。它似乎没有达到成功功能。
  • complete() 必须在success()之后调用...如果你不使用它就删除它!
  • 按照你说的,我已经删除了完整的功能,它没有产生影响,我很感谢你的建议,但是我没有意识到应该省略它。
  • 好吧,我认为 beforeSend 没有以好的方式使用。 “一个预请求回调函数,可用于在发送之前修改 jqXHR(在 jQuery 1.4.x 中,XMLHTTPRequest)对象。”只需尝试不使用 beforeSend 的 ajaxcall。
  • 如果没有在发送之前,检查消息会按预期消失,但是其余的 ajax 无法触发。
【解决方案2】:

您是否包含 jquery.js 文件。 如果没有,请在标记中包含以下行

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

【讨论】:

  • 我将这个包含在我的 header.php 文件中,该文件包含在我的 require 语句中。
【解决方案3】:

它可能是错误的。

jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调自 jQuery 1.8 起已弃用。要为最终删除代码做好准备,请改用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always()。

$.ajax( "example.php" )
 .done(function(html) {
     console.log(html);
 })
 .fail(function(html) {
     console.log(html);
 })
 .always(function(html) {
     console.log(html);
 });

【讨论】:

    【解决方案4】:

    代替html=="success",把它放在if条件中:

    html.responseText=="success"
    

    responseText 包含来自服务器的字符串格式的响应。如果您不希望使用 XML 或 JSON 格式,则应始终使用 responseText。

    【讨论】:

    • 我已经尝试过您的建议,但在这种情况下不起作用,但我会在未来听取此建议。
    • 然后尝试相同的方法,但删除 ajax 请求的 dataType 属性。
    • 或者你可以改进它并从服务器返回一个 JSON 对象并将响应作为 JSON 捕获。这是解决您的问题的最干净的方法。
    • 我会考虑到这一点,我很少使用 JSON,但我今天可以试试!
    • JSON 是原生的 javascript 对象表示法,所以如果你使用它,你会获得很多好处,特别是通过 API 获取东西,也就是说,你不必转换返回的数据来自服务器。
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2012-10-31
    • 2012-05-04
    • 2011-02-22
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多