2011-02-13 210 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 

然後,一切工作順利:)謝謝大家好歹!