在客戶端,我創建了一個JSON對象,用於在輸入字段中存儲來自用戶輸入數據的電子郵件和電子郵件類型。然後我使用ajax
將它作爲JSON發送到我的服務器。服務器不發回JSON對象
$(function() {
$(document).on('click', '.send', function (e) {
var dataToSend = [];
$('.form-group1').each(function() {
var data = {};
$(this).find(':input[data-name]').each(function() {
data[$(this).data('name')] = $(this).val();
});
dataToSend.push(data);
});
$.ajax({
url: '/pers1',
type: 'POST',
contentType:'application/json',
data: JSON.stringify(dataToSend),
dataType:'json',
});
console.log(JSON.stringify(dataToSend))
});
});
服務器然後存儲到數據庫中作爲JSON對象這樣的:
class PersonalInfoHandler1(BaseHandler):
@tornado.web.authenticated
def post(self):
global piData
receipt = tornado.escape.json_decode(self.request.body)
print receipt
piData={
'emails': receipt,
}
self.settings['db'].userInfo.update({'PiUsername':self.current_user},{"$set":piData})
print 'from pers1'
self.redirect('/pers')
當頁面重新加載的數據被髮送回另一個Handler
爲:
class PersonalInfoHandler(BaseHandler):
@tornado.web.authenticated
def get(self):
self.render("personal.html", user=self.current_user, ,emails=user['emails'])
的客戶端得到這個回來,我嘗試迭代關鍵:值是這樣的:
var emails = '{{emails}}';
emails = emails.replace(/u'/g,"");
emails = emails.replace(/'/g,"");
emaildata=JSON.stringify(emails)
$.each(emaildata, function(key, value) {
alert(key + ': ' + value);
});
相反,我得到的錯誤在Chrome控制檯:
Uncaught TypeError: Cannot use 'in' operator to search for '28' in "[{emailAdd: , emailDesc: }]" jquery.min.js:2 jquery.min.js:2 m.extend.each jquery.min.js:2 (anonymous function)
所以我不能遍歷鍵和/或值。實際的JSON或代碼有問題嗎?
我是否正確假設你的回答是一個數組?因爲'in'運算符在對象上工作:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in – naneau 2014-08-31 16:35:44
是的,它是一個數組的排字 – user94628 2014-08-31 16:39:14