いつも大変お世話になっております。
アプリからゲストユーザーの追加を行いたいのですが、
以下のエラーが発生し、追加できません。対処法がわからずこちらに投稿させて頂きました。
以下エラー内容とソース
“message”:“不正なJSON文字列です。”,“id”:“1505999166-1659838939”,“code”:“CB_IJ01”
var record ={};
record ={
“guests”: [
{
code:“example.com”,
password:“p@ssword”,
timezone: “Asia/Tokyo”,
name : “東京 三郎”
}
]
}
var url = kintone.api.url(‘/k/v1/guests’);
var xmlHttp = new XMLHttpRequest();
xmlHttp.open(“POST”, url, false);
xmlHttp.setRequestHeader(‘X-Requested-With’,‘XMLHttpRequest’);
xmlHttp.setRequestHeader(‘Content-Type’,‘application/json’);
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState === 4) {
console.log(xmlHttp.response);
}};
xmlHttp.send(record);
}
以上となります。
よろしくお願い申し上げます。
変数recordに入っているJavaScriptオブジェクトを、JSONフォーマットの文字列に変換してください。
例)
var record ={};
record ={
"guests": [
{
code:"example.com",
password:"p@ssword",
timezone: "Asia/Tokyo",
name : "東京 三郎"
}
]
}
record = JSON.stringify(record); // ← JSONフォーマットの文字列に変換する
// 以下同様。
補足
厳密には、ここでいうJSONはあくまで、データフォーマットとしてのJSONですので、テキストデータをPOSTする必要があります。JavaScript内で単純に変数にJSON形式で代入すると、それはJavaScriptのObjectとなってしまうので、テキストデータではなくなってしまうのです。
kintone JavaScript API上はそれで問題ないのですが、今回はREST APIなのでテキストデータとして送ってあげる必要があります。
山口さんこんにちは。
XHRを使ってJSONを送信する場合は、
xmlHttp.send(JSON.stringify(record));
とする必要があります。
特別な理由がなければkintone.apiを使ったほうがなにかと無難です。
さらに補足ですが、JavaScript API(kintone REST API リクエスト)から実行するパターンも併記します。
こちらの方が楽で見通しもいいですし、可能であれば、こちらの方法がおすすめです。
var params = {
"guests": [
{
code: "test@example.com",
password:"p@ssword1",
timezone: "Asia/Tokyo",
name : "東京 三郎"
}
]
};
kintone.api(kintone.api.url('/k/v1/guests', true), 'POST', params,
function(resp){ // 成功時
console.log(resp);
},
function(resp){ // エラー時
console.log(resp);
});
xmlHttpRequestですとCSRFトークンも要しますし、皆さんおっしゃっている通りkintone.api()の利用がベターかと思います。
var record = {};
var token = kintone.getRequestToken();
record[" __REQUEST_TOKEN__"] = token;
record["guests"] = [{
code: "test@example.com",
password: "p@ssword1",
timezone: "Asia/Tokyo",
name: "東京 三郎"
}];