SyntaxError:JSON.parse:JSON数据之后的意外非空白字符

时间:2011-07-20 19:39:22

标签: php jquery ajax json cakephp

我有以下AJAX调用:

$('#FonykerUsernameRegister').blur(function(){
            if($(this).val().length > 2) {
                alert($(this).val());
                $.ajax({
                    url: '<?php echo $html->url('/fonykers/validate_username',true); ?>' + '/' + $(this).val(),
                    dataType: 'json',
                    type: 'POST',
                    success: function(response) {
                        if(!response.ok) {
                            $(this).addClass('error');
                            error.html(response.msg);
                            error.fadeIn();
                        } else {
                            if($(this).is('.error')) {
                                alert('im in');
                                $(this).removeClass('error');
                            }
                            $(this).addClass('ok');
                        }
                    },
                    error:function (xhr, ajaxOptions, thrownError){
                        alert('You fail');
                        alert(xhr.statusText);
                        alert(thrownError);
                    } 
                });        
            } else {
               error.html('Username must have at least 3 characters');
               error.fadeIn();
               $(this).addClass('error');
            }
        });

这是它正在调用的方法:

function validate_username($username) {
        $this->layout = 'ajax';
        $response = array();
        $fonyker = $this->Fonyker->find('first', array(
            'conditions' => array('Fonyker.username' =>  $username)
        ));

        if(!strlen($username) > 2) {
            $response = json_encode(array('ok' => false, 'msg' => 'Username must have at least 3 characters'));
        } else if(!preg_match('"^[a-zA-Z0-9]+$"', $username)) {
            $response = json_encode(array('ok' => false, 'msg' => 'Username must be alphanumeric'));
        } else if ($fonyker) {
            $response = json_encode(array('ok' => false, 'msg' => 'Username is already in use'));
        } else {
            $response = json_encode(array('ok' => true, 'msg' => ''));
        }

        echo $response;
    }

在AJAX调用中,它总是转到错误部分并输出该错误,我在PHP代码中看不到任何空格。有什么想法吗?

修改

发生的事情是CakePHP在响应中回显整个视图,但不是视图而是错误屏幕。

如果控制器中需要不需要视图的AJAX方法,则必须在执行任何操作之前将控制器方法的$this->autoRender属性设置为false

6 个答案:

答案 0 :(得分:2)

你的ajax功能可能有回音。检查它并从ajax函数中删除任何回声,打印和调试。

当您返回json数据时,您无法回显任何内容。

答案 1 :(得分:1)

基于OP的评论回复:

虽然我并不是特别熟悉CakePHP的做法,但在使用ZendApplication时,首先要做的就是制作一个空的布局。正常响应放在默认布局中,而ajax响应放在空布局中。

在控制器方法中,将$this->layout设置为空布局以覆盖默认值(

有关更具体的说明,请参阅http://www.balistupa.com/blog/2009/07/how-to-change-cakephp-layout/

答案 2 :(得分:0)

您是否在视图文件夹中的layouts文件夹中检查了ajax.ctp文件?

答案 3 :(得分:0)

使用ColdFusion进行开发时,请务必关闭调试,否则可能导致此问题

答案 4 :(得分:0)

您的客户端/ ajax调用需要来自服务器的JSON数据类型。现在,您需要确保服务器返回JSON dataType,否则请将请求更改为请求以反映服务返回的内容。

要对此进行调查,请使用firebug查看您收到的内容作为回复。 我刚收到这个错误,我修复了它。

答案 5 :(得分:0)

我有同样的问题,但我解决了“$ this-&gt; autoRender = false;”在功能!