我有一个非常简单的jQuery / ajax脚本,用于会员驱动的网站。该脚本只是检查用户是否输入了信息,对我的数据库进行了验证,对于失败的登录尝试返回1,如果用户名/密码匹配则返回0。
当我运行它时,该功能完美无效,无需从ajax调用它。
Firefox:一切正常。
Chrome / Safari:该查询会锁定所有内容。当我输入有效信息时,甚至没有任何请求记录(在开发人员工具chrome / safari供应中)。输入无效信息后,请求将消失,并返回3.
我对此感到非常困惑。
这是一个“沙盒”问题吗?据我所知,Firefox和Chrome / safari处理XHR的方式不同......虽然不要问我怎么做。
我正在运行MAMP的基本安装。这可能是我开发人员环境中的问题吗? (我将在今天下午晚些时候在实时服务器上测试它)
这是我的AJAX调用和它正在调用的php脚本。
AJAX:
$.ajax({
//I've also tried..
//url: '_modules/php/session.php',
url: 'http://localhost/current/100TradeJack/httpdocs/_modules/php/session.php',
type: 'POST',
cache: false,
timeout: 5000,
data: "method=login&"+$('#loginTop').serialize(),
error: function(XMLHttpRequest, ajaxOptions, thrownError)
{
alert("ERORR!!");
},
success: function(response){
alert(response);
if(response == '0'){
alert("log user in");
window.location.replace("http://localhost/current/100TradeJack/httpdocs/trading.php");
} else if(response == '1') {
alert("invalid username/password");
} else {
alert("ERRROOR!");
}
}
});
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);
}
答案 0 :(得分:2)
PHP代码中存在一个小问题:
在你的查询数据库之后,你会返回一些代表状态的数字,但是在脚本的末尾你关闭了与数据库的连接... mysql_close($ conn)将永远不会发生在结束语句之前使用那些各种返回的函数范围。也许你遇到的那些打嗝是因为未建立的数据库连接。
JS 代码看起来很好
我修改了ajax调用以获取静态html,我编辑了各种场景(使用0,1,......)并且它完美运行(Opera,Chrome,FF)..
同时尝试window.alert($('#loginTop').serialize())
检查发布的数据,或者使用表单和JS(没有所有其他逻辑)创建一个简单的html文档,并将其指向您的脚本。
同时检查console.log()
的脚本,因为这可能会破坏除FF以外的其他浏览器中的javascript
答案 1 :(得分:1)
这不应该是沙盒问题。你是如何解雇这个ajax请求的?您确定开发控制台没有提供错误输出(确保您不排除错误)。
我没有PHP / web开发环境,但您可以尝试一些调试内容:
答案 2 :(得分:0)
而不是
return 1;
使用
echo "1";
你在ajax中调用了这个函数,它希望在页面中找到响应写入的内容
同样检查你的mysql结果可能是查询中有一个错误,为什么它的路由到
else { return 3 };