2013-09-21 73 views
0

我正在構建一個Google Forms克隆,它將創建一個表單並將其存儲在服務器中。表單生成器輸出這JSON.stringify格式:如何通過Google App Engine上的jQuery.ajax接收JSON

{"method":"post","action":"/test","html":[{"input_type":"input_text","caption":"What is your name?"},{"input_type":"radio","caption":"What is the name of your dog?","options":{"benny":"Benny","billy":"Billy","bobby":"Bobby"}}]} 

我想送這個給我的App Engine的後端是這樣的:

$.ajax({ 
    type: "POST", 
    url: save_url, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: json_string, 
    success: function (e) { 
     console.log(e); 
    } 
}); 

但我怎麼上「開放」這個JSON字符串我的服務器,以便我可以將其插入到我的數據庫?

第一個問題:我應該使用self.request.body來獲取數據對象(json字符串),還是有更好的方法來獲取它。現在我已經做了解碼字符串以獲得正確的格式。

def post(self): 
    form_elements = json.loads(urllib.unquote_plus(self.request.body)) 
    self.write(form_elements) 

第二個問題:使用json.loads解析JSON字符串,我得到這個錯誤:ValueError: No JSON object could be decoded爲什麼它不知道它的JSON?

+0

看到這個問題:http://stackoverflow.com/questions/1171584/how-can-i-parse-json-in-google-app-engine – mccannf

+0

如果我理解正確,該問題的最佳答案是使用json庫並使用json.loads函數,但正如我在我的問題中提到的那樣,這就是我已經使用的 –

+1

您可以顯示代碼生成JavaScript變量json_string的位置嗎?你有沒有試過記錄self.request.body的樣子?我懷疑你實際上並沒有發送一個json字符串。 – dragonx

回答

4

這就是我所做的,從工作代碼中提取出來並分解到基本位。

var blob = JSON.stringify(stuff); 
    $.ajax('/api/', { 
    'type': 'POST', 
    'async': false, 
    'data': { 
     'json': blob, 
    }, 
    'dataType': 'json', 
    }).done(function(data) { 
    // ... 
    } 


def post(self): 
    blob = self.request.get('json') 
    try: 
     stuff = json.loads(blob) 
    except: 
     # ... 

我還沒有嘗試過使用request.body的全部內容。

相關問題