jquery $ .post在某些浏览器中无效

时间:2011-11-10 16:58:04

标签: jquery post

 $(document).ready(function(){
     $("#btnc").click(function(){
            $.post("php/snova_campanha.php", {campanha : $("#campanha").val() },
                function(data){
                    if(data == "1" )
                    {
                        alert(data);
                    }
                    else
                        alert(data);
                });
     });
});

php只有:

<?php
echo 0;
return;
?>

HTML:

<div id="corpo" align="center">
    <br/><br/>
    <h1 align="center" style="color:#F8F8F8">Nova Campanha</h1>
    <br/><br/><br/>
    <form id="novacamp">
        <label style="color:#F8F8F8" for="campanha">Nome</label>
        <input align="middle" size="35" type="text" name="campanha" id="campanha"/>
        <br/>
        <input type="submit" id="btnc" value="OK"/>
    </form>
</div>

我使用这个php只是为了测试,我将实现插入数据库,并返回1成功或0。

好吧,我有两页,另一页工作正常:

工作登录页面:

 $(document).ready(function(){
     $("#login").click(function(){
        $("#login").attr("disabled", "disabled");
                $.post("php/slogin.php", {usuario : $("#usuario").val(), senha : $("#senha").val()},
                function(data){
                    if(data != "1" && data != "0")
                    {
                        alert(data);
                        $("#login").removeAttr("disabled");
                    }
                    else
                        window.location = "principal.php";
                });
     });
});

HTML

<div id="bar">
    <div id="container">
        <!-- Login Starts Here -->
        <div id="loginContainer">
            <img id="logoNetradio" src="../images/logonetradio3.png"/>
            <br/><br/><br/>
                <form id="formLogin">
                    <label for="usuario">Usuário</label>
                    <input align="middle" size="35" type="text" name="usuario" id="usuario"/>
                    <br/><br/>
                    <label for="senha">Senha</label>
                    <input align="middle" size="35" type="password" name="senha" id="senha" />
                    <br/>
                    <input type="submit" id="login" value="Login"/>
                </form>
        </div>
        <!-- Login Ends Here -->
    </div>
</div>

我没有看到任何差异......... 当我运行非工作代码时,我的浏览器上的地址变为www.myaddress.com/current_page.php?campanha=value_on_textfield 似乎$ .post正在当前页面上发出GET请求...... 这两个代码都适用于IExplore 并且工作页面适用于chrome和IE但不适用于firefox .... 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

实际上,return false在jQuery事件处理程序中有一些副作用,大多数人都不知道。如果您只想阻止表单提交,那么您应该使用event.preventDefault()

为了让您的生活更轻松,我建议您更改PHP文件以返回json,如下所示:

<?php
echo "{'status':'0'}";
?>

然后在执行帖子时指定'json':

$(document).ready(function(){
     $("#btnc").click(function(evt){
            $.post(
                "php/snova_campanha.php", 
                {campanha : $("#campanha").val() },
                function(data){
                   alert(data.status);
                },
                "json"
            );
            // Keep the form from submitting
            evt.preventDefault();
     });
});

另外,我建议调查malsup's excellent jQuery form plugin,它会照顾你在这里尝试做的大部分事情。

最后,您可以尝试使用完整的$.ajax来代替$.post

$('#btnc').click(function(evt) {
   $.ajax({
       method: 'POST',
       url: 'php/snova_campanha.php',
       data: {
           campanha: $('#campanha').val()
       },
       dataType: 'json',
       success: function(data, status) {
           alert(data);
       },
       error: function(jqXHR, status, err) {
           alert('ERROR');
           alert(String(err));
       }
   });
   evt.preventDefault();
});

可能发生的事情是$.post调用正在抛出错误。如上所述使用$.ajax可以捕获该错误。

答案 1 :(得分:0)

如果目的是不允许按钮发布表单,则按钮的click事件应返回false