目标是成功将新作业发布到马拉松REST API。我正在使用jQuery v1.12.4ajax请求中的json无效
以下代码是从窗体获取值并将有效的json打印到console.log。我已经使用JSONLint对其进行了验证。但它似乎没有进入服务器。这里是一个的被打印到日志中的JSON和我看到的萤火:
{"id":"basic-0","cpus":"0.1","mem":"32","instances":"1","cmd":"while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done"}
我得到400错误的请求,然后我看到这个疯狂的响应(萤火虫):
{"message":"Invalid JSON","details":[{"path":"/instances","errors":["error.expected.jsnumber"]},{"path"
:"/cpus","errors":["error.expected.jsnumber"]},{"path":"/mem","errors":["error.expected.jsnumber"]}]
}
我有不知道什么样的回应意味着什么。它来自jQuery还是服务器?有谁知道从JavaScript调用马拉松REST API的工作示例?
这是代码。是的,我知道在请求中传递用户名和密码是非常糟糕的做法,但我还没有弄清楚如何使用基本身份验证,但我还没有想出如何在马拉松网络服务器上启用SSL。婴儿的步骤...
var $form = $('#appsubmit1');
$form.submit(function() {
var form2json = JSON.stringify($('form').serializeObject());
console.log(form2json);
$.ajax({
type: 'POST',
url: 'https://user:[email protected].achillesv.net/marathon/v2/apps',
data: form2json,
dataType: 'json',
contentType: "application/json; charset=utf-8",
timeout: 10000
}).done(function(resp, status, xhr) {
console.log("ajax function done: ", status);
}).fail(function(xhr, status, errmsg) {
console.log("error: ", status);
console.log("error: ", errmsg);
});
return false;
});
下面是serializeObject函数的代码,我没有写,但发现在线发现。它的效果很好,除了它将所有值加上双引号。我需要将数字值取消。不幸的是我没有看到代码在双引号中的位置,因此我不知道如何将它们取出。我仍在努力。
$.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;
};
我想检查每个THIS.VALUE对一个正则表达式,消除引号如果值是完全的数字,即0.1%,3,200.5,等我会后,当我弄明白,因为我的数字有人否则必须有这个相同的问题。
我自己发现了这个问题,并回来回答我自己的问题。但是,**谢谢** Akis和Jonathan。乔纳森,我会尝试serializeObject,但我读它(或serializeArray)没有处理所有各种形式的可能性,如复选框等,我希望你是对的。 –
Akis的答案基本上是正确的,但没有给你一个特别的解决方案。 jQuery的'serialize()'最常用于获取AJAX的表单数据。你只想用当时知道的具体原因来使用替代品。无论如何感谢您的投票 – Jonathan
请参阅[this fiddle](https://jsfiddle.net/ge2j4hk2/)。在jQuery中没有'serializeObject()',所以我假设你正在使用一些插件 – Jonathan