2014-09-04 32 views
0

我是Ruby on Rails的新手,我想知道一個Rails等同於我用來使用PHP的東西。在Rails中使用ajax檢查一些關於變量的東西

當檢查用戶輸入是否符合某些標準時,我通常會使用JavaScript對一個處理數據並回顯json數據的php頁面進行一些Ajax調用。然後,我使用json數據來構建適當的行爲。

例如,讓我們假設一個用戶提交了一個郵政編碼,我想在服務器端的郵政編碼上運行一些檢查。我會做這樣的事在JS:

// This is what the user submitted 
var postcode = $("#postcode").val(); 

// Here, I post it to a PHP file 
// PHP file examines the data and returns result 
// (in this case, if the postcode is covered or not) 

$.post("scripts/postcode_handling.php", {postcode: postcode}, function(data) { 

var result = jQuery.parseJSON(data); 

// Check the coverage 
if (result.coverage == true) { 

// Do Something 

} else { 

// Do something 

} 

而且在PHP文件,我會做這樣的事情:

... 
$result = array('coverage' => false , 'message' => "Your postcode is not covered") 
echo json_encode($result); 
.... 

我試圖用行動代替PHP文件做Rails中類似的東西在一個控制器下,但我無法弄清楚。這是Rails中的常見做法,我該如何做這樣的事情?

+0

發佈您在軌道控制器中嘗試的內容。 – 2014-09-04 12:31:57

回答

0

讓我們用你的郵政編碼示例。假設您想根據郵政編碼進行地址查詢。

  1. 創建路線
  2. 創建一個控制器和動作以處理該請求
  3. 創建的Javascript邏輯來處理髮送請求和DOM操作

打開config/routes.rb和添加路由:

resources :address_lookups, only: :new 

創建控制器來處理路由:

rails g controller AddressLookups 

以上命令將在app/controllers內創建一個名爲address_lookups_controller.rb的新控制器。

現在添加必要的邏輯控制器內處理地址查詢:

class AddressLookupsController < ApplicationController 
    def new 
    # This action will expect a params[:post_code] variable 
    # that you will pass with your ajax request 
    post_code = params[:post_code] 
    address = FindSomeAddress.lookup(post_code) 
    render json: address 
    end 
end 

現在創建一個JavaScript處理程序發送請求並辦理退換貨。如果您生成控制器,則應在app/assets/javascripts之內已有一個名爲address_lookups.js.coffee的文件。這裏有一些僞代碼。

jQuery -> 

    $('#post_code').on 'blur', -> 
    field = $(this) 
    post_code = field.val() 

    if post_code.length is 8 
     xhr = $.ajax 
     url: "/address_lookups/new" 
     data: 
      post_code: post_code 
     success: (data) -> 
      # do something with data 
     dataType: "json" 
+1

可能會將'format :: json'添加到路由中,因此它絕不會嘗試呈現html並且無法找到視圖。也爲此,我會使用'$ .getJSON'而不是'$ .ajax'。 – engineersmnky 2014-09-04 13:10:33

+0

@engineersmnky良好的反饋!謝謝。 – Mohamad 2014-09-04 13:27:34

+0

謝謝。您的解決方案非常有效我最終做了這樣的事情:'render html:1如果PostcodeCoverage.exists?(:postcode => @postcode)'在控制器中。 – 2014-09-04 23:55:57

相關問題