2

我目前正在尝试制作一个 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 格式,然后以 : parsererror syntaxerror unexpected token '<' 结束,它对应于整页的第一个字符!

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

非常感谢您的帮助

4

5 回答 5

3

添加标题

'Accept: application/json'
于 2017-05-10T03:11:41.713 回答
0

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

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

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

感谢大家的帮助。

于 2015-10-26T15:27:45.620 回答
0

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

于 2017-08-16T10:21:11.133 回答
0

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

还将“JSON”更改为“json”

于 2015-10-24T18:38:41.013 回答
0

另外两件事要尝试:

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

这基本上与您使用的想法相同,但它已被纳入轨道。

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

尽管设置了适当的接受标头,但这就是解决问题的方法。

于 2021-07-22T13:23:03.990 回答