Jquery return false和event.preventDefault()不起作用

Jquery return false和event.preventDefault()不起作用,jquery,json,Jquery,Json,我有一个登录表单,它被支持向服务器提交名称和密码,获得json响应,并将“登录”按钮更改为“注销”按钮。下面的代码将我带到访问MySQL数据库的php页面,它将停留在那里,而不是在后台执行所有操作。有什么解释吗 这是我的jQuery $('#loginbutton').click(function(event) { event.preventDefault(); $.post( 'phpcodes.php', $('#loginform').serialize(), function(d

我有一个登录表单,它被支持向服务器提交名称和密码,获得json响应,并将“登录”按钮更改为“注销”按钮。下面的代码将我带到访问MySQL数据库的php页面,它将停留在那里,而不是在后台执行所有操作。有什么解释吗

这是我的jQuery

$('#loginbutton').click(function(event) {
event.preventDefault();
    $.post( 'phpcodes.php', $('#loginform').serialize(), function(data) {
         ...do something here
       },
       'json' 
    );
});
这是我的表格:

<div id="login" class="menubutton">LOGIN</div>
<div id="loginfields">
  <form action="phpcodes.php" id="loginform" method="post">
  <input type='text' name='username' placeholder='Username' required>
  <input type='text' name='password' placeholder='Password' required>
  <input type='hidden' name='sort' value='1000'>
  <button id='loginbutton' class="menubutton">LOG IN</button>
  </form>
</div>
登录
登录
这是我的php:

<?php
include 'connect.php';
if($_POST[sort]==1000)
{
$_POST[username] = filter_var($_POST[username], FILTER_SANITIZE_STRING);
$_POST[password] = filter_var($_POST[password], FILTER_SANITIZE_STRING);
$result = mysql_query("SELECT name FROM users where name ='$_POST[username]' and password='$_POST[password]'"); 
while($row = mysql_fetch_array($result))
{
$listings_results[] = array(
    'user'=>$row[name],
                        );
$_SESSION[user]=$row[name];
}
mysql_close($connection);
$results[results] = $listings_results;
// send the encoded results;
$json = @json_encode($results);
echo $json;
}
?>


我在php页面上得到的答案是正确的,但它应该在后台传输到我的原始页面,并以id“login”显示在div中。

在执行ajax请求之前返回false,这肯定是个问题。此外,您还需要为单击处理程序提供一个参数,如“e”,这样您就可以在单击事件上调用preventDefault()。

您实际上不希望按钮上出现
type=“submit”
,因为您不希望浏览器提交表单。如果您将其更改为
type=“button”
,则它不会提交表单,您也不会离开当前页面

接下来,从处理程序中删除return false,您应该得到想要的结果


您可以向表单中添加
onsubmit=“return false”
,以在输入时停止提交,也可以使用表单标记以外的内容来包含输入。但是,如果不使用表单标记,则必须在单击处理程序中显式选择要序列化的输入,而不是像在原始代码中那样只选择表单元素。

很可能是您过早地运行了事件绑定代码。这是您第一次使用jQuery吗?我编辑了代码并添加了event.preventDefault();这是我以前尝试过多次的原始代码,但现在我被卡住了,找不到错误…哦,是的,我是jquery的新手,可以回答你的另一个问题。@CupawnTae这是默认行为。如果要使用表单标记,那么应该使用表单提交事件。好吧,这不是更新div的html的方式。您忘记了.innerHTML部分。除了在输入时按enter键表单将提交之外。(但他的当前代码也会发生这种情况)删除type=“submit”和删除return false-仍然没有改进这是另一个问题-GET不是由事件引起的。你确定你没有使用JSONP而不是JSON?JSONP始终是一个GET。还是会有服务器端重定向?@KevinB很好,我添加了一些想法来阻止提交-enter@Sandor,KevinB指出我的错误-type=“button”不是默认值,您需要显式添加它,然后它将不会提交表单-我已更新应答我编辑了代码并添加了event.preventDefault();这是我尝试的原始代码,以前对我工作过很多次,但现在我被卡住了,找不到错误。。。