【问题标题】:json request return html in railsjson请求在rails中返回html
【发布时间】:2015-10-24 17:48:31
【问题描述】:

我目前正在尝试制作一个 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。

我确切地说,我的 rails 控制器的welcomeController 代码包含:

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

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

因此,Jquery 尝试将结果解析为 JSON 格式,然后以 a 结束: 解析器错误语法错误意外令牌'

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

非常感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails json format respond-to


    【解决方案1】:

    添加标题

    'Accept: application/json'
    

    【讨论】:

      【解决方案2】:

      尝试改变 { render :json => @z } 来渲染 json: { data: @z }

      还将“JSON”更改为“json”

      【讨论】:

      • 我更改了这些,但也没有用:/ 感谢您的帮助
      • 你为什么要做 JSONParsedata(data)?取回的数据应该已经是json格式了。
      • 是的,我删除了它,但它总是呈现 html 而不是 Json。我强迫它用 format.html {render json: @z} 把 Json 发回给我。它呈现 Json,但我无法检测到它何时是 Json 或何时是 Html:/
      【解决方案3】:

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

      此方法在 Chrome 等基本浏览器中有效,但对于我正在使用的应用程序 IDE“Rhomobile”来说还不够(即使使用相同的 Ajax 请求!)。为了解决这个问题,我在请求中添加了一个参数“format”和一个值“json”(&format=json),并向我的控制器添加了一个条件:如果变量 'format' 存在 && format == 'json' 然后渲染结果为 JSON。否则它会以 HTML 格式呈现。这适用于 Rhomobile 和浏览器。

      我不确定为什么这适用于基本浏览器而不是 Rhomobile,但我认为这是由于“跨域”请求。 (我使用了“rack-cors”服务器端)。 现在它适用于两者。

      感谢大家的帮助。

      【讨论】:

        【解决方案4】:

        您可以在您的 api 中添加一个“json”后缀,例如调用 http://host:port/api.json

        【讨论】:

          【解决方案5】:

          另外两件事要尝试:

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

          这基本上与您使用的想法相同,但它已融入到 Rails 中。

          1. 在您的路线中设置默认格式,例如,
          resources :users, only: [:update, :index, :destroy, :show, :create], path: '/admin/users', defaults: { format: :json }
          

          这就是解决问题的原因尽管设置了适当的接受标头。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-30
            • 2013-04-23
            • 2017-03-12
            • 1970-01-01
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多