Jquery chrome/safari中的简单AJAX查询提供了不那么简单的调试情况

Jquery chrome/safari中的简单AJAX查询提供了不那么简单的调试情况,jquery,ajax,Jquery,Ajax,我有一个非常简单的jQuery/ajax脚本,用于会员驱动的网站。脚本只是检查用户是否输入了信息,并根据我的数据库进行验证,如果登录尝试失败,则返回1,如果用户名/密码匹配,则返回0 当我从ajax调用函数运行它时,该函数工作得非常好 Firefox:一切正常。 Chrome/Safari:查询正在锁定所有内容。当我输入有效信息时,甚至没有任何发出请求的记录(在开发者工具chrome/safari中)。当输入无效信息时,请求将发出并返回3 我对此感到相当困惑 这是一个“沙箱”问题吗?据我所知,F

我有一个非常简单的jQuery/ajax脚本,用于会员驱动的网站。脚本只是检查用户是否输入了信息,并根据我的数据库进行验证,如果登录尝试失败,则返回1,如果用户名/密码匹配,则返回0

当我从ajax调用函数运行它时,该函数工作得非常好

Firefox:一切正常。
Chrome/Safari:查询正在锁定所有内容。当我输入有效信息时,甚至没有任何发出请求的记录(在开发者工具chrome/safari中)。当输入无效信息时,请求将发出并返回3

我对此感到相当困惑

这是一个“沙箱”问题吗?据我所知,Firefox和Chrome/safari处理XHR的方式不同。。。虽然不要问我怎么做

我正在运行的基本安装。这可能是我的开发人员环境中的问题吗?(今天下午晚些时候,我将在实时服务器上测试它)

这是我的AJAX调用和它调用的php脚本

阿贾克斯:

session.php:

if($_POST['method'] == 'login'){
    $validated = login($_POST['email'], $_POST['password']);
    echo $validated;
}


function login($email, $password){
$connection = mysql_connect("localhost","root","root") or die(mysql_error());
mysql_select_db("sandbox_members", $connection) or die(mysql_error());


if($email){
 $email = mysql_real_escape_string($email);
} else {
 return 1;
}

if($password){
 $password = mysql_real_escape_string($password);
} else {
 return 1;
}


$query = "SELECT * FROM users WHERE username='". $email . "' AND password='". $password ."'";

$result = mysql_query($query);

if($row = mysql_fetch_array($result)){
 return 0; 
} else {
 return 3;
}

//if it gets to here the username/password combo was incorrect or was not found in the db
return 1;
mysql_close($connection);
}

这不应该是沙箱问题。您如何启动这个ajax请求?您确定开发控制台没有提供错误输出(确保没有排除错误)

我没有PHP/web开发环境,但您可以尝试一些调试工具:

  • 尝试将url设置为域相对url:“/current/100TradeJack/httpdocs/_modules/php/session.php”
  • 将登录验证URL指向0或1的静态页面,以测试其是否有效
  • 通过在ajax调用之前放置警报,找出chrome和safari“静音”的位置。
    • 事件是否会被炒鱿鱼
    • 您的函数(包含此ajax请求)是否被调用
    • 是否调用了初始化代码
  • 执行一个普通的ajax请求,获取登录验证结果(或静态结果),并向响应发出警报。请在页面加载完成后单击或重试
  • 如果您有很多JS代码,请简化问题。开始删除代码(先备份),看看它是否仍然有效
  • 怪我(哎呀)。如果您仍然感到困惑,可以将经过删减的代码作为bug提交给webkit。您还可以检查它是否是已确认的错误
    • 而不是

       return 1;
      
      使用

      您在ajax中调用函数,它希望在页面中写出响应


      同时检查您的mysql结果,可能查询中有错误,导致其路由到

      else { return 3 };
      

      您的PHP代码中有一个小问题:

      在查询数据库之后,返回一些表示状态的数字,但是在脚本末尾,您关闭了与数据库的连接mysql\u close($conn)将永远不会出现,因为在结束语句之前,您会跳出函数范围并返回各种返回值。可能您遇到的这些问题是由于数据库连接未关闭造成的

      JS代码看起来不错

      我修改了ajax调用以获取一个静态html,我对它进行了编辑以适应各种场景(使用0,1,…),它工作得非常好(Opera,Chrome,FF)

      还可以尝试
      window.alert($('#loginTop').serialize())
      检查发布的数据,或者创建一个带有表单和JS(没有所有其他逻辑)的纯html文档,并将其指向脚本


      还要检查脚本中的
      console.log()
      ,因为这可能会破坏除FF以外的其他浏览器中的javascript

      我甚至会接受一个提示作为目前公认的答案。。。我没有提到,当它被召唤时,我会回应它的回音。。。当我添加else{return 3;}时,它不会返回任何内容。当我从login()立即返回0时,它工作正常。Chrome会在if($row=$result)行之后立即锁定。到目前为止,Ajax在所有其他情况下都能正常工作。。。这个查询就是问题所在。你明白了-我在返回之前把mysql_close($conn)放进去了,它成功了。太傻了。。。
      echo "1";
      
      else { return 3 };