目標是成功將新作業發佈到馬拉松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