无法使用$ .getJSON获取json响应

时间:2011-02-13 15:11:02

标签: javascript jquery ruby-on-rails json ruby-on-rails-3

我目前正在开发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)

5 个答案:

答案 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

然后,一切顺利:)无论如何谢谢大家!