2011-02-13 162 views
3

我目前正在开发一个Ruby on rails 3应用程序。

我的服务器控制器功能呈现一个JSON对象作为回应:

class DaysController < BaseController 
    ... 
    def the_days 
    ... 
    render :json => days 
    end 
end 

在我的javascript,我用下面的代码从服务器获取JSON响应

$.getJSON( 
      url, 
      {emp_id: emp_id}, 
      function(data) { 
        var result = data.response; 
        alert(result) 
        alert(data) 
       }, 
       "json" 
     ); 
(即从控制器 the_day函数)

我使用firefox browswer和检查与Firebug,在Firebug网络 - > XHR,我看到Get请求是成功的,并且respons é“天”在那里。这是请求和响应都成功。

但是我没有看到在上面的$.getJSON函数中定义的两个alert窗口,为什么?为什么我无法在$.getJSON函数中得到“”的回应?

-----------------编辑------------------

我修改了代码这一个:

$.ajax({ 
      url: myURL, 

      type: 'GET', 

      data: { 
       emp_id: emp_id 
      }, 

      dataType: "json", 

      success: function(data) { 
       alert("hi"); 
       alert(data) 
      } 
     }); 

当我运行这段代码,浏览器是停留在success: function(data)

回答

2

如果data是回来null,但反应是成功的,否则,我会说,你发送请求的方式违反了Same Origin Policy

该请求需要发送到服务于原始页面的相同主机/端口/协议。

如果这只是您开发环境中的一个问题,您可以通过从终端应用程序--disable-web-security启动它来测试Chrome


编辑:尝试从data改变参数名称别的东西,像dat或什么的。

然后尝试警报:

alert(dat); 

我听说过有与data参数麻烦一些浏览器中,当你使用一个AJAX调用的data财产。

+0

嗨,我试过了,但仍然没有弹出警告窗口... – Mellon 2011-02-13 15:37:06

+0

@Mellon:是* only * alert吗?尽可能简化回调。尝试`alert('test')`。如果可以,请发布更多信息。 – user113716 2011-02-13 16:08:01

+0

嗨,即使警报('测试')不是弹出...顺便说一句,'天'是一个字符串 – Mellon 2011-02-13 16:32:28

1

我猜测问题是data没有响应属性。尝试仅提醒data变量。它应该是days对象本身。

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 
     } 
     }); 
0

这听起来像你是不是送你的Ruby应用程序正确的标题。 Firebug应该将回应Content Type报告为application/json,因为这就是jquery期待的结果。

您可以尝试在您的ajax调用HTML中更改datatype以查看您的alert是否适用于此,但这对json解析没有帮助。

0

ALL,最后,我想出了根本原因。原因仅仅是因为服务器返回的“无效的json数据”。这是在轨道控制器功能 'def the_days':

render :json => days 

应该进行修改,以

render :json => days.to_json 

然后,一切工作顺利:)谢谢大家好歹!