Because We Love Happy Coding

フリーライターからエンジニアへ。発信力だけあり余ってる感じ

kintone からAjaxでデータをPOSTするのに苦労した

別サーバーへのPOST送信。いわゆるCORS。

$.ajax();の覚え書き - Qiita]

テンプレートとか乗ってて親切。

$.ajax({
    url:'https://',
    type:'POST',
    data: event.record,
    // contentType: 'application/json; charset=UTF-8',
    dataType:'text',
    // xhrFields: {//CORSでクッキーを送信する場合
    //     withCredentials: true
    // },
    cache:false,
    async:false//これがないとCancelされる
})
.done( function (data){
    console.log(data);
})
.fail( function (jqXHR, textStatus, errorThrown){
    console.log(jqXHR);
    console.log(textStatus);
    console.log(errorThrown);
})
.always( function(data){

});
  • 今回CORSなので、httpsが必須
  • CORSでクッキーを送信する場合はwithCredentials:trueに
  • async:falseにしないと、レスポンス前にkintoneが遷移してしまい、キャンセルされる模様。

JSONがなぜか通らないのは、何か見落としているのかも。

kintone.proxy を使えば同期処理の問題はおこらないのかな?

Ajaxのエラーに関する参考URL

Ajaxのエラーについては、いくつか種類があるので、それぞれ参考になったサイトなど。

Provisional Headers are shown. について

「Provisional Headers are shown.」が表示される場合、何らかの理由でキャッシュが表示されている、というのが一般的。今回の場合は、非同期処理になっていたので、レスポンスを待たず遷移してしまっていた。この場合もProvisional headers are shownになる。

Asyncの問題以外では、サーバー側とブラウザ側のキャッシュを削除するという対応が多いみたい。

Ajax - ajax時に出るエラーの原因と解決策について(provisional headers are shown)|teratail

【Chrome DevTools】「Provisional headers are shown」が表示される原因と対策

関連して、ECCUBE3のキャッシュ制御についても調べたのでついでに。

EC-CUBE3 twig(テンプレートのキャッシュ制御) - Qiita

クロスドメイン(CORS)について。

クロスドメインAjaxを投げる際に注意すべき点がいくつか。

クロスドメインのAjax通信でセッションを維持する - Qiita

クロスドメインのAjax通信でcookieがうまくセットされない問題 - Qiita