如何在红宝石的ajax调用中将params作为json传递?

时间:2013-10-19 06:09:35

标签: python ruby rest sinatra

我正在从ruby进行ajax rest调用,然后进入python进行rest call proccess。当我试图在json formate中调用休息和传递params时,我认为它可能不会将此作为json数据传递。 我的ajax电话如下:

get '/cnet' do
    temp="mynet"
    url = URI.parse('http://192.168.1.9:8080/v2.0/networks') 
    params = {'net_name'=>temp}.to_json
    resp = Net::HTTP.post_form(url, params)
    resp_text = resp.body
    puts resp_text    
    erb resp_text
end

Python代码如下:

@app.route('/v2.0/networks',methods=['POST'])
def net_create():
    net_res=request.json
    print "======================="
    print net_res['net_name']
    print "======================="
    net_name=net_res['net_name']

当我试图从python中读取json数据时,它给出了以下错误:

File "/network-ui/neutron_plugin.py", line 226, in net_create
    net_name=net_res['net_name']
TypeError: 'NoneType' object has no attribute '__getitem__'

我不知道到底发生了什么。

我正在关注ajax post call的链接: http://rest.elkstein.org/2008/02/using-rest-in-ruby.html http://developer.yahoo.com/ruby/ruby-rest.html

任何帮助非常感谢。感谢

1 个答案:

答案 0 :(得分:0)

不要将JSON传递给Net::HTTP。该方法需要一个简单的ruby散列。

实际上,你发送POST参数 - POST参数通过HTTP请求体发送,它们不是JSON或其他什么,只是简单的字符串。这是HTTP基础知识,所以我建议你read a bit关于这个协议的工作方式,如果你理解它会更容易。

关于python方面,我不太了解Python,但如果你真的需要JSON(我怀疑),你将不得不以某种方式解析params。