json 请求 return html rails
json request return html in rails
我目前正在尝试制作一个 Ajax 脚本来与我本地主机上的 Rails 服务器通信(目前)。问题是我在我的 $.ajax 请求中指定我想要 'json' 中的格式,但是 rails returns 一个 '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 格式解析结果,然后以以下方式结束:
parsererror syntaxerror 意外标记 '<'
对应整页的第一个字符!
我搜索了几个小时,但我不知道如何解决这个问题。
非常感谢您的帮助
尝试更改 { render :json => @z } 以呈现 json: { data: @z }
也将"JSON"改为"json"
其实我今天早上解决了这个问题:
此方法适用于 Chrome 等基本浏览器,但不适用于 "Rhomobile" 我正在使用的应用程序 IDE(即使使用相同的 Ajax 请求!)。为了解决这个问题,我向请求添加了一个参数 "format" 和一个值 "json" (&format=json) 并且我向我的控制器添加了一个条件:如果变量 'format' exists && format == 'json' 然后将结果渲染到 JSON。否则它会在 HTML 中呈现。这适用于 Rhomobile 和浏览器。
我不确定为什么这适用于基本浏览器而不适用于 Rhomobile,但我认为这是由于 'Cross-domain' 请求。 (我使用 'rack-cors' 服务器端)。
现在它适用于两者。
感谢大家的帮助。
添加header
'Accept: application/json'
您可以将 "json" 后缀添加到您的 api 点赞调用 http://host:port/api.json
另外两件事要尝试:
- 尝试将 .json 添加到 url 的末尾。例如,如果您请求 url http://server.org/foo you would instead make the request to http://server.org/foo.json (or from http://server.org/.json if the url was http://server.org/).
这与您正在使用的想法基本相同,但它融入了 rails。
- 在您的路线中加入默认格式,例如
resources :users, only: [:update, :index, :destroy, :show, :create], path: '/admin/users', defaults: { format: :json }
这就是我遇到问题时解决的问题 尽管 设置了适当的接受 headers。
我目前正在尝试制作一个 Ajax 脚本来与我本地主机上的 Rails 服务器通信(目前)。问题是我在我的 $.ajax 请求中指定我想要 'json' 中的格式,但是 rails returns 一个 '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 格式解析结果,然后以以下方式结束: parsererror syntaxerror 意外标记 '<' 对应整页的第一个字符!
我搜索了几个小时,但我不知道如何解决这个问题。
非常感谢您的帮助
尝试更改 { render :json => @z } 以呈现 json: { data: @z }
也将"JSON"改为"json"
其实我今天早上解决了这个问题:
此方法适用于 Chrome 等基本浏览器,但不适用于 "Rhomobile" 我正在使用的应用程序 IDE(即使使用相同的 Ajax 请求!)。为了解决这个问题,我向请求添加了一个参数 "format" 和一个值 "json" (&format=json) 并且我向我的控制器添加了一个条件:如果变量 'format' exists && format == 'json' 然后将结果渲染到 JSON。否则它会在 HTML 中呈现。这适用于 Rhomobile 和浏览器。
我不确定为什么这适用于基本浏览器而不适用于 Rhomobile,但我认为这是由于 'Cross-domain' 请求。 (我使用 'rack-cors' 服务器端)。 现在它适用于两者。
感谢大家的帮助。
添加header
'Accept: application/json'
您可以将 "json" 后缀添加到您的 api 点赞调用 http://host:port/api.json
另外两件事要尝试:
- 尝试将 .json 添加到 url 的末尾。例如,如果您请求 url http://server.org/foo you would instead make the request to http://server.org/foo.json (or from http://server.org/.json if the url was http://server.org/).
这与您正在使用的想法基本相同,但它融入了 rails。
- 在您的路线中加入默认格式,例如
resources :users, only: [:update, :index, :destroy, :show, :create], path: '/admin/users', defaults: { format: :json }
这就是我遇到问题时解决的问题 尽管 设置了适当的接受 headers。