我目前正在尝试使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
还有两件事可以尝试:
- 尝试在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 }
这是什么修复的问题,当我有它尽管有适当的接受头集。