我目前正在开发Ruby on rails 3应用程序。
我的服务器控制器函数将json对象呈现为响应:
class DaysController < BaseController
...
def the_days
...
render :json => days
end
end
在我的javascript中,我使用以下代码从服务器获取json响应(来自控制器中的the_day
函数)
$.getJSON(
url,
{emp_id: emp_id},
function(data) {
var result = data.response;
alert(result)
alert(data)
},
"json"
);
我使用 firefox 浏览器并使用 Firebug 检查,在Firebug Net-&gt; XHR中,我看到Get请求成功,响应“天”在那里。请求和响应都是成功的。
但是我没有看到上面$.getJSON
函数中定义的两个警报窗口,为什么?为什么我无法在$.getJSON
函数中获得“天”的响应?
-----------------被修改------------------
我编写了我的代码:
$.ajax({
url: myURL,
type: 'GET',
data: {
emp_id: emp_id
},
dataType: "json",
success: function(data) {
alert("hi");
alert(data)
}
});
当我运行此代码时,浏览器停留在success: function(data)
答案 0 :(得分:2)
如果data
返回null
,但响应成功,我会说您以违反Same Origin Policy的方式发送请求。
请求需要发送到为原始页面提供服务的同一主机/端口/协议。
如果这只是开发环境中的一个问题,您可以通过Chrome
从终端应用程序启动它来--disable-web-security
进行测试。
编辑:尝试将参数名称从data
更改为其他内容,例如dat
或其他内容。
然后尝试提醒:
alert( dat );
当您使用AJAX调用的data
属性时,我听说有些浏览器在使用data
参数时遇到问题。
答案 1 :(得分:1)
我猜测问题是data
没有响应属性。尝试仅提醒data
变量。它应该是days
对象本身。
答案 2 :(得分:0)
我希望我可以发表评论,但我想我还没有访问。
无论如何,我会从一些更基本的东西开始。添加一些文本提醒只是为了确保您实际上将其发送到您认为的位置。即...
$.getJSON(
url,
{emp_id: emp_id},
function(data) {
alert('hi') // add this
var result = data.response;
alert('bye') // add maybe even this
alert(result)
alert(data)
},
"json"
);
有时当我调试时,我发现即使是我最基本的假设也是错误的。
编辑:这里是我最近实施的工作代码中的一些示例代码
$.ajax({
url: 'users/check_username',
type: 'GET',
data: {
username: username
},
dataType: "json",
success: function(user_exists) {
alert(user_exists) // CHANGE THIS PART
}
});
答案 3 :(得分:0)
听起来您没有在ruby应用程序中发送正确的标头。 Firebug应该将响应Content Type
报告为application/json
,因为这正是jquery所期望的。
您可以尝试将ajax调用中的datatype
更改为html,以查看您的alert
是否可以使用,但这对json解析没有帮助。
答案 4 :(得分:0)
所有,最后,我找出了根本原因。原因很简单,因为服务器中返回了“无效的json数据”。那是在rails控制器功能'def the_days
'中:
render :json => days
应修改为
render :json => days.to_json
然后,一切顺利:)无论如何谢谢大家!