我有一个用户编辑的任务。我这样做了但我不能将值作为json对象传递。我怎样才能加入两个值。 我的第一个目标是
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
}
else {
o[this.name] = this.value || '';
}
});
return o;
};
我的第二个对象是
var location = function() {
var self = this;
self.country = ko.observable();
self.state = ko.observable();
};
var map = function() {
var self = this;
self.lines = ko.observableArray([new location()]);
self.save = function() {
var dataToSave = $.map(self.lines(), function(line) {
return line.state() ? {
state: line.state().state,
country: line.country().country
} : undefined
});
alert("Could now send this to server: " + JSON.stringify(dataToSave));
};
};
ko.applyBindings(new map());
});
我想连接这个。我试过这个,但是我收到了一个错误
$.ajax({
url: '/users/<%=@user.id%>',
dataType: 'json',
//async: false,
//contentType: 'application/json',
type: 'PUT',
data: {total_changes: JSON.stringify(dataToSave) + JSON.stringify($("#edit_user_1").serializeObject())},
//data:JSON.stringify(dataToSave),
//data:dataToSave,
success: function(data) {
alert("Successful");
},
failure: function() {
alert("Unsuccessful");
}
});
当我运行它时,它在终端显示如下错误。
JSON::ParserError (757: unexpected token at '{"utf8":"✓","_method":"put","authenticity_token":"n1Fc6+azAS2B+wkzso7WefOsvKdPDKv8CvyT5DjV9T4=","user[name]":"Nithin V","user[age]":"24","user[email]":"nithinv@assyst.in","user[phone]":"9846093155"}'):
app/controllers/users_controller.rb:63:in `update'
我该如何解决这个问题?
答案 0 :(得分:1)
如果你有json1和json2对象,你可以这样做:
$.extend(json1, json2);
所以在json1中你会得到两个对象合并。
答案 1 :(得分:0)
问题是JSON.stringify(…) + JSON.stringify(…)
。这将创建一个类似"{…}{…}"
的字符串,显然无效JSON(这是您从JSON::ParserError
获取的地方)。
我不确定您要完成什么以及服务器期望的JSON结构,但您可以执行类似
的操作 …
contentType: 'application/json',
data: JSON.stringify( {
total_changes: dataToSave,
edits: $("#edit_user_1").serializeObject()
}),
…