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