【问题标题】:SyntaxError: JSON.parse: unexpected non-whitespace character after JSON dataSyntaxError:JSON.parse:JSON 数据后出现意外的非空白字符
【发布时间】:2011-10-09 16:43:47
【问题描述】:

我有以下 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-&gt;autoRender 属性设置为 false

【问题讨论】:

  • 错误是针对 -空白字符,而不是空白字符。另外,你能发布结果的json吗?使用 Firebug(或类似工具)观察响应。
  • 查看响应,我看到 cake 发送回带有 JSON 响应的整个页面 HTML,因为它说它需要一个视图。
  • 你不应该在你的控制器方法中回显一些东西。这就是视图的用途。解决此问题的技术上正确的方法是在此处设置一个响应变量,并在视图中回显它。创建一个全新的文件来回显一行有点乏味,因此您也可以从此方法返回 $response ,您将在 ajax 调用中获得响应。两者都比在我认为的控制器方法中回显更可取。

标签: php jquery ajax json cakephp


【解决方案1】:

根据 OP 的评论回复:

虽然我并不特别熟悉 CakePHP 的实现方式,但在使用 ZendApplication 时,首先要做的事情之一就是创建一个空布局。普通响应放置在默认布局中,而 ajax 响应放置在空布局中。

在您的控制器方法中,将$this-&gt;layout 设置为您的空布局以覆盖适用的默认布局。

查看http://www.balistupa.com/blog/2009/07/how-to-change-cakephp-layout/了解更具体的说明

【讨论】:

  • 最后它设置了 $this->autoRender = false;在控制器方法上设置它没有视图,你是最大的帮助,乔纳森,谢谢你,我会用答案编辑我的问题,但我会接受你让我走上正确道路的问题。
  • 很高兴我能提供帮助,即使这不是特定的解决方案。也感谢您编辑您的问题,以便将来帮助其他人
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您的 ajax 函数中可能有回声。检查它并从 ajax 函数中删除任何回显、打印、调试。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        要对此进行调查,请使用 firebug 查看您得到的响应。 我刚收到这个错误,我修复了它。

        【讨论】:

          【解决方案6】:

          我有同样的问题,但我用“$this->autoRender = false;”解决了在函数中!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-16
            • 2011-11-26
            • 1970-01-01
            • 2018-04-25
            • 2014-03-28
            • 1970-01-01
            • 2012-11-12
            • 1970-01-01
            相关资源
            最近更新 更多