Json请求在rails中返回HTML



我目前正在尝试使Ajax脚本与我的本地主机上的Rails服务器通信(目前)。问题是我在$中指定了。ajax请求,我想要的格式在'json',但rails返回'html'格式:

$(document).ready(function(){
$('form').on("submit",function(){
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        url : "http://192.168.0.36:3000/?value=10",
        type : "GET",
        dataType : 'JSON',
        success: function(data){
            alert(JSONParsedata(data));
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert(textStatus +", " +errorThrown);
        }
    });

    return false;
})

在rails服务器的控制台日志中,我可以读取:

WelcomeControllerindex处理为HTML…在34毫秒内完成200个OK…

我实际上收到了来自服务器的响应,但是是HTML格式而不是JSON。

我确定用于welcomeController代码的rails控制器包含:

 respond_to do |format|
  format.html
  format.json { render :json => @z }
end

z是我想发送回Ajax请求的变量,并且在此之前定义(我点亮了代码以使其易于理解)

结果,Jquery试图解析JSON格式的结果,然后完成:解析错误语法错误意外标记'<'对应于整页的第一个字符!

我搜索了几个小时,我不知道如何解决这个问题。

非常感谢您的帮助

添加标题

'Accept: application/json'

尝试更改{render:json => @z}以呈现json: {data: @z}

也将"JSON"改为"JSON"

实际上我今天早上解决了这个问题:

这种方法在Chrome等基本浏览器中工作,但对于"Rhomobile",我正在使用的应用程序IDE(甚至使用相同的Ajax请求!)来说还不够。为了解决这个问题,我向请求添加了一个参数"format"和一个值"json"(&format=json),并向控制器添加了一个条件:如果变量"format"存在&&format == 'json'然后将结果呈现为json。否则它将以HTML呈现。这在Rhomobile和Browser上都有效。

我不知道为什么这工作在一个基本的浏览器,而不是在Rhomobile,但我认为这是由于"跨域"的请求。(我在服务器端使用了"rack-cors")。

谢谢你们所有人的帮助。

你可以给你的API添加一个"json"后缀,比如调用http://host:port/api.json

还有两件事可以尝试:

  1. 尝试在url的末尾添加.json。例如,如果您请求的url是http://server.org/foo,那么您将改为向http://server.org/foo.json发出请求(如果url是http://server.org/,则从http://server.org/.json发出请求)。

这基本上是相同的想法,你正在使用,但它被烤到rails。

  • 在路由中设置一个默认格式,例如
  • resources :users, only: [:update, :index, :destroy, :show, :create], path: '/admin/users', defaults: { format: :json }
    

    这是什么修复的问题,当我有它尽管有适当的接受头集。

    最新更新