2015-09-29 46 views
-1

我正在使用jQuery的$.get函數從服務器獲取JSON響應。在Rails 4中渲染JSON響應時未觸發成功函數

$.get(SITE_EDIT_HOME_URL,{key: key},function(r){ 
    r = JSON.parse(r); 
    console.log(r); 
}); 

這就是我如何接收請求和發送響應

def group_fields 
    respond_to do |format| 
     format.js do 
      @group_fields = @site.theme.group(params[:key],@site); 
      return render json: @group_fields 
     end 
    end 
end 

檢查網絡,這就是Chrome瀏覽器接收作爲響應:

{"type":"group","fields":[1,2,3,4]} 

一個適當的JSON字符串。但是成功回調函數沒有執行,也沒有顯示錯誤。哪裏不對?我該如何做這項工作?我是否需要創建group_fields.js?我測試了這個最後的想法,但我失去了回調函數的上下文。

在此先感謝

+0

如果成功回調函數沒有得到執行,驗證chrome如何收到響應'r'?此外,你不需要'返回渲染',只是'渲染'很好 – PhilVarg

+0

我與檢查員驗證。檢查元素>網絡。並且我使用了返回功能,因爲在我發佈之前還有其他渲染。改變它不會影響的情況 –

+1

不會改變'get'到'getJSON'和'format.js'到'format.json'做什麼?因爲你有多種渲染類型,我想知道它是否找不到合適的渲染類型。 – PhilVarg

回答

1

更改getgetJSONformat.jsformat.json應該解決的問題。它可能源於mime類型不匹配,因爲您有多種不同的格式。

如看到的here,存在映射到這些格式的各種不同類型。沒有指定json的含糊不清可能導致類型不匹配,並且rails無法正常返回

1

您需要嘗試下面的代碼。你必須改變你的格式爲respond_to format json,因爲你從jquery訪問,然後迴應應該回到jquery。

def group_fields 
    @group_fields = @site.theme.group(params[:key], @site) 
    respond_to do |format| 
     format.html { render :nothing => true } 
     format.json { render json: @group_fields} 
    end 
    end 
end 

jQuery的

當從控制器的響應是JSON格式,你沒有解析成JSON。儘量做到:

$.get(SITE_EDIT_HOME_URL,{key: key},function(r){ 
    console.log(r); 
}) 
.done(function() { 
    console.log(r); 
}) 
.fail(function() { 
    console.log(r); 
}) 
.always(function() { 
    console.log(r); 
}); 

我希望這對你有所幫助。