我正在尝试从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"}]"
答案 0 :(得分:0)
您的JSON响应看起来应该更像:
providers: [{"id":2,"full_name":"Test, User"}]
不需要最外面的引号。
如果你真的需要外部引号,你需要逃避内部引号。
答案 1 :(得分:0)
在$ .ajax({})中,添加属性“async:false”。 parseJSON还没有获得JSON - 它会立即尝试对undefined(“u”)进行操作并抛出错误。
答案 2 :(得分:0)
删除to_json
,因为您已经告诉rails返回json
format.json { render :json => { :providers => @providers }, :status => :ok }