我让jsGrid为完整的CRUD操作工作,但是当我添加新记录时,post方法以某种方式将所有字段转换为字符串,然后再传输到我的API。我的API接收所有字段作为字符串,无论它们是字符串,数字还是布尔值。
这是我的insertItem函数:
console.log( "data before post: " + JSON.stringify(item) );
insertItem: function (item) {
var d = $.Deferred();
$.ajax({
type: "POST",
url: "https://myserver...",
data: item,
dataType: "json",
}).done(function (response) {
console.log( "done: " + JSON.stringify(response) );
d.resolve(response);
}).fail(function( msg ) {
console.log( "fail" + msg );
d.reject();
});
}
如果我在$ .ajax之前控制项目对象,它会正确显示数字字段。例如:
data before post: {"question":"My Question","value":45,"timeout":10, "isActive":true }
但是在done函数console.log中,json看起来如下,这也正是它在服务器上的接收方式:
done: {"question":"My Question","value":"45","timeout":"10", "isActive":"true"}
如果我使用邮递员并发布正确的json对象,一切都很好,数据类型应该是这样,所以我的API没有错。 api响应也会在收到json对象时返回它。
不知何故,jsgrid在发布到我的API之前将所有属性值转换为字符串。这真令人讨厌。
更新 即使我尝试替换数据:项目:
data: {"question":"myquestio77", "value": 77}
我的API仍然收到77作为" 77"。
答案 0 :(得分:0)
我在这里找到了答案:https://stackoverflow.com/a/34628133/679439
基本上,您必须在发送数据之前对数据进行字符串化,当然还要添加我缺少的内容类型。你必须同时做到这两点。
data: JSON.stringify(data),
contentType: 'application/json'