Codeigniter - 发送jQuery发布数据后没有结果

我正在使用jQuery的AJAX和Codeigniter PHP框架开发注册表单,但codeigniter并不重要,如果您看到奇怪的 echo form_open(); 或其他奇怪的东西,请勿担心,他们都是代言人。

好的,这是我的代码问题。我尝试了下面使用jquery的简单发布(在php代码中,其他所有内容都被省略了,并添加了一个简单的echo'hello,world!';函数,它工作正常/给我一个hello,world!):

 $.post( 'ajax_signup_username' ,function(result){

                $(span_error).html(result);

            } );

但是,当我传递一个后置数据时,它不起作用(不输出任何结果,请注意,我正在使用完整的PHP代码写成下面):

$.post( 'ajax_signup_username', {php_username_error:username_value} ,function(result){

                $(span_error).html(result);

            } );

我尝试过搜索,但提供的解决方案并未解决此问题。任何想法有什么不对?

以下是完整的代码:

以下是html代码:

<body>

<?php $attr = array( 'onsubmit' => 'return final_val()' ); echo form_open('formValidation/signUp',$attr); ?>



Username: <input type="text" onBlur="username_val()" value="<?php echo set_value('username')?>" name="username" maxlength="50" /><?php echo form_error('username'); ?>


Email: <input type="text" onBlur="email_val()" value="<?php echo set_value('email')?>" name="email" maxlength="50" /><?php echo form_error('email'); ?>


Password: <input type="password" onBlur="pass_val()" value="<?php echo set_value('pass')?>" name="pass" maxlength="50" autocomplete="off"/><?php echo form_error('pass'); ?>


Password Confirm: <input type="password" onBlur="pass_val()" value="<?php echo set_value('passconf')?>" name="passconf" maxlength="50" autocomplete="off" /><?php echo form_error('passconf'); ?>


<input type="submit" value="SIGN UP!" name="signup"/>

</form> </body>

以下是php代码:

function ajax_signup_username(){

    $username = $_POST['php_username_error'];

    $uniqueUn = $this->db->prepare("SELECT * FROM iowfiwefwmember WHERE username=:username");

    $uniqueUn->bindParam(':username', $username);

    $uniqueUn->execute();

    $count1 = $uniqueUn->fetch();

    if( $count1 == FALSE ){

        echo 'USERNAME AVAILABLE!';

    }else{

        echo 'USERNAME IS ALREADY USED!';

    }

}

以下是javascript代码:

function username_val(){

        $.ajaxSetup({ cache : false });

            username_value = $("input[name='username']").val();

            span_error = "span[name='username_error']";

            //$(span_error).load('ajax_signup_username', {php_username_error:username_value}); <-- also doesn't work [ $.ajaxSetup() is set to POST ]

            $.post( 'ajax_signup_username', {php_username_error:username_value} ,function(result){

                $(span_error).html(result);

            } );

    }
0
额外 编辑
意见: 1
你会得到一个JavaScript错误?当您直接向网址发送发布请求时会发生什么?
额外 作者 Explosion Pills,
@PHPForLife在浏览器中浏览是不够的..你必须使用浏览器或其他用户代理进行相同的发布请求。
额外 作者 Explosion Pills,
@PHPForLife表单?
额外 作者 Explosion Pills,
@PHPForLife如果可以在ajax中完成,可以通过其他方式完成。你将不得不弄清楚,否则你将永远无法测试Ajax请求。
额外 作者 Explosion Pills,
也请不要打扰PDO代码,重点是在发送参数中的发布数据后,它不起作用。
额外 作者 PHP For Life,
@ExplosionPills Firefox中的Web开发人员工具栏给了我一个POST服务器错误,但我试图在浏览器中导航代码并存在。
额外 作者 PHP For Life,
@vansimke是的,它是。当您在浏览器中浏览 localhost/foo/bar/ajax_signup_username 时,它已存在。
额外 作者 PHP For Life,
@ExplosionPills我该怎么做?
额外 作者 PHP For Life,
@ExplosionPills form_open()自动在窗体中生成一个post方法
额外 作者 PHP For Life,
仍然没有运气
额外 作者 PHP For Life,
ExplosionPills&vansimke - 对不起,浪费你的时间,事实证明,这实际上是一个代码问题,无论如何,谢谢!干杯! :d
额外 作者 PHP For Life,
你如何路由的网址'ajax_signup_username'的功能?这是一些CodeIgniter魔术?
额外 作者 vansimke,
@PHPForLife如果FireFox抱怨,那么URL显然是有问题的。尝试将完整网址(localhost/foo/bar/...)硬编码到$ .post调用中,看看它是否符合您的要求。
额外 作者 vansimke,

1 答案

经过长时间在我的笔记本电脑前面做哑面,我发现这是 一个代码错误问题,我打开导致问题的CSRF保护。关闭CSRF功能后,它工作得很好,不要再犯同样的错误,年轻人!干杯! :d

0
额外
尽管我不推荐CodeIgniter进行新的开发。由于Ellislab决定不再支持它,所以将差错修复从版本2.1.3更新为2.1.4需要将近2年的时间。但是,对我来说,CSRF功能也带来了问题。
额外 作者 Mauricio A. Cinelli,