【问题标题】:Uncaught SyntaxError: Unexpected token uUncaught SyntaxError: Unexpected token u
【发布时间】:2014-04-17 10:13:51
【问题描述】:

我正在尝试从 get 请求中获取 JSON 响应。但是,我收到以下错误:Uncaught SyntaxError: Unexpected token u。我知道 rails 路由有效,因为我确实在控制台中成功加载了响应。

Ajax 响应应该在复选框更改并被选中时启动。

为什么我从$.parseJSON 收到此错误?

Rails 控制器

def providers
   @providers = User.order("last_name ASC, first_name ASC, middle_name ASC").where("provider_flag = ? and inactive_flag = ? and del_flag = ?", true, false, false).select("id, CONCAT(IFNULL(last_name,''), ', ', IFNULL(first_name,''), IFNULL(middle_name,'')) AS full_name");

    respond_to do |format|
        format.json { render :json => { :providers =>  @providers.to_json}, :status => :ok }
        # format.json { render :json => @providers.to_json }
    end
end

Javascript

$('#provider_chk').change(function() {
        if($(this).is(":checked")) {
            $.ajax({
                url: '<%= providers_schedule_index_path %>',
                type: 'GET',
                dataType: 'json',
                data: {
                    authenticity_token: $('meta[name=csrf-token]').attr('content')
                },
                success: function(data) {
                    console.log('loaded successfully.');
                    var providers = $.parseJSON(data.responseText)['providers'];
                    providers_count = $(providers).size();
                    console.log(providers);
                    console.log(providers_count);
                },
                error: function(data) {
                    console.log("An error has occurred!")    
                }
            });
        } else {
            $('#providers_results').empty();
        }
    });

JSON 响应

providers: "[{"id":2,"full_name":"Test, User"}]"

【问题讨论】:

  • 你的 Json 是什么?你用JSON lint 测试了Json。我看到了您的代码,但是您得到了什么实际响应,您可以发布吗?你可以用 console.log(data);
  • 是的,JSON 是有效的。在 JSON lint 测试
  • 你能把它贴出来吗,我看到了供应商的定义
  • 谢谢,现在在上下文中查看它:谢谢
  • 您正在对 JSON 进行双重编码,这不是必需的。这不应该是问题,但您仍应删除to_json

标签: javascript jquery ruby-on-rails ajax json


【解决方案1】:

您的 JSON 响应应该看起来更像这样:

providers: [{"id":2,"full_name":"Test, User"}]

不需要最外层的引号。

如果确实需要外引号,则需要转义内引号。

【讨论】:

  • 我在使用 .to_json 和 Rails 时从来没有遇到过任何问题。我将如何更改 Javascript 或 Rails 控制器?
【解决方案2】:

在 $.ajax({}) 中,添加属性“async:false”。 parseJSON 还没有得到那个 JSON - 它立即尝试对 undefined ("u") 进行操作并抛出错误。

【讨论】:

    【解决方案3】:

    删除to_json,因为您已经告诉rails 返回json

    format.json { render :json =&gt; { :providers =&gt; @providers }, :status =&gt; :ok }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-17
      • 2019-02-10
      • 2014-07-08
      • 2011-03-09
      • 2014-01-06
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多