2014-02-18 49 views
0

我設法使用Ajax調用發送字符串(測試)值,但我無法真正在我的視圖中使用我的控制器(flash通知或其他)顯示它:如何在Rails控制器中獲取Ajax值

Ajax調用使用JQuery

$(document).ready(function() { 

     $("#completed").live('click', function() { 
     alert (document.getElementById('query').value); 
}); 

$.ajax 

({ 
    url: '.', 
    data: { 
    chosenformat : "myvalue", 
    }, 
    type: 'post', 
    success: function() 
    { 
     alert ('success'); 
    } 
    }); 
}); 

我想我的控制器內得到 'chosenformat' 值:

format = params[:chosenformat] 
flash[:format] = "chosen format: " + params[:chosenformat].to_s() 

if !(format.nil?) 
     respond_to do |format| 
     format.html # contact.html.erb 
     format.json { 
     render :response => {:format => format} 
     } 
    end 
end 

問題是,我得到了「成功」的消息顯然所以沒有路由的問題,但我不能看到顯示在認爲變量:

<%- flash.each do |key, msg| -%> 
    <div id="<%= key %>"> 
    <p>flash <%= msg %></p> 
    <%- end -%> 

非常感謝您的幫助:)

+0

爲什麼你要發送'chosenFormat',然後得到它沒有改變再回來? – Wahtever

+0

如果你想看到控制器返回的值,你應該改變你的'成功'功能,以用新值更新你的HTML。你正在返回一個JSON對象,它不會修改html文檔本身 – rhernando

+0

我基本上想要將該值傳遞給我的控制器。然後,在那個控制器中,我可以重新做一些工作(通過運行一個外部腳本來編寫文件,...) 我想發送給控制器的那個值最終將會是一個帶有多個下拉列表的連接的文本字段選擇。 如果你覺得我太過分了,並且因此使事情變得複雜,我很樂意發送給我。)=) – user2567674

回答

0

我認爲錯誤是在你發送的數據的形式,因爲喜歡你沒有設置郵件正文(contentType中),您發回他把標準的類型只是改變你的代碼

data: "chosenformat=" + "myvalue", 

或者改變m的身體類型消息被默認爲:

contentType : 'application/x-www-form-urlencoded; charset=UTF-8' 
+0

data:「chosenformat =」+「myvalue」在服務器上給我錯誤500,contentType:'application/x-www-form-urlencoded; charset = UTF-8'沒有任何區別。感謝您的建議,雖然:) 我傾向於認爲: - 要麼發送之前(xml爲例) - 或我不處理控制器端的響應,因爲我應該 – user2567674

0

如果您收到任何JSON響應,則表示問題出在您的控制器中。

我看到的問題是:

分配:format = params[:chosenformat]這是確定,

然後設置flash[:format] = "chosen format: " + params[:chosenformat].to_s()這也行,

那麼你是否格式變量存在:if !(format.nil?)

但是!稍後您再次使用format變量在respond_to區塊內。但這個變量改變了它的內容。在塊裏面你沒有params[:chosenformat]了! 而不是你有當前的請求數據。

修復問題更改變量的名稱。 讓我重構代碼位:

chosen_format = params[:chosenformat] 
flash[:format] = "chosen format: #{chosen_format}" 

if chosen_format.present? 
    respond_to do |format| 
    format.html 
    format.json { 
     render json: { format: chosen_format } 
    } 
    end 
end 

你將有你現在在JSON響應格式,如果你渲染HTML時,它會在flash可變

+0

謝謝palinium的有用評論:) 它仍然無法正常工作..快速的問題:我必須重新加載頁面才能顯示我的值?說這是因爲我在這裏通過點擊我的按鈕來調用Ajax: '​​<%= button_tag'調用AJAX',:class =>「button_to」,:id =>「completed」,:remote => true% >' 和URL是:'url:'.''(請參閱上面的完整ajax設置) 因此,也許它必須重新加載頁面才能顯示它。 歡呼聲 – user2567674

相關問題