2011-07-11 106 views
2

發送Rails中JSON對象這是一個非常簡單的問題,我想彌補我知識的空白。通過郵政

很簡單的應用程序的工作如下: 1:I:web應用程序創建值 1的散列:II:打開該散列成JSON 1:III:通過POST 這發出跨越到另一個應用程序的JSON是最主要的問題

2:I:其他網絡應用程序接收JSON,解串並變回成一個對象。

@hostURL = 'http://127.0.0.1:20000/sendJson' 

對於1我有我和ii完成。不太難。

@myHash = HASH.new 
    @myHash = 
    { 
     "myString" => 'testestestes' 
     "myInteger" => 20 
    } 

    @myJsonHash = @myHas.to_json 

發送我的申請後請求如下所示:

res = Net::HTTP.post_form(URI.parse(@hostURL), 
    {'myString'=>'testestestest, 'myInteger' => 20}) 

但是我在茫然,如何在通過郵局發送的JSON哈希值。

至於2:

@request = UserRequest.new({:myString => params[:myString], :myInteger => params[:myInteger] }) 
      if @request.save 
    #ok 
     puts "OBJECT CREATED AND SAVED" 
    else 
    #error 
     puts "SOMETHING WENT WRONG WITH OBJECT CREATION" 

請問如我聽到的Rails這就夠上接收請求自動反序列化。


附註:應該做什麼?

這些是2個Web應用程序通信,從而將一些HTML會很糟糕。可能是數字響應? 200? 404?

有沒有行業標準,當涉及到的數據作出反應,而不是在響應瀏覽器

回答

2

你想用from_json這確實的to_json相反。這將使用JSON發送對象並將其轉換爲ruby,以便您的模型或您保存的模型都能理解。

@post = Post.new 
@post.name = "Hello" 

#this converts the object to JSON 
@post.to_json 

@post = You want to use `from_json` which does the opposite of `to_json`. This will take the object being sent in JSON and convert it into ruby so your model or however you save it will understand. 


@post = Post.new 
@post.name = "Hello" 

#this converts the object to JSON 
@post.to_json 

@post = { 
    "name" => 'Hello' 
    } 

#this puts it back into JSON 
@post.from_json 

@post.name = "Hello" 
@post.to_json 

在將JSON(服務器端)發送到通常通過JavaScript或AS3完成的控制器方面。

你應該說明你是如何發佈。從一個表單,從一個鏈接。這很重要;然而,最簡單的方法是使用jQuery。

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: json 
}); 

在這裏,你想要的url是帖子的網址,例如具有app.com/posts(您的域,然後控制器),然後將數據應該是JSON格式,例如:

data = { 
     "name" => 'Hello' 
     } 
+0

JSON通常從JavaScript發送。例如見代碼。 – s84

+0

好吧,我想我會得到你的上面的代碼。但是你是否在說它不應該或者不能用ruby或rails來發送。對不起,我沒有定義如何發佈。說實話我並不確定。目前沒有任何形式,並且在我看來很簡單,我可以硬編碼一個json並將其發送給其他應用程序。我讀過一個表格,需要休息後在HTML,但到現在爲止我剛剛被使用NET:HTTP代碼和它的工作很好。接受的網絡應用程序沒有問題,如問題2中所述。 – OVERTONE