ajax読み込みでFailed to load resource: the server responded with a status of 412 (Precondition Failed)が出る場合
4776 ワード
Safariのajax読み込みでPrecondition Failedになる場合
発生状況
jqueryの$.ajaxで以下のようにデータを取得している場合
$.ajax({
url: "hoge.json",
method: 'POST',
dataType: 'json',
})
.done(function(data) {
//do something
})
.fail(function() {
console.log( "error" );
})
.always(function() {
//do something
});
発生するエラー
[Error] Failed to load resource: the server responded with a status of 412 (Precondition Failed) (hoge.json, line 0)
直し方
$.ajaxのbeforeSendで時間を指定してあげれば良い。
確認しているなかで、safariがヒットする。iOSのサファリも出るのかな。
$.ajax({
url: "hoge.json",
method: 'POST',
dataType: 'json',
//以下追加
//再現している環境がsafariのみなので、安易にsafariのみ判定
beforeSend : function( xhr ){
if (window.navigator.userAgent.toLowerCase().indexOf('safari') != -1)
xhr.setRequestHeader("If-Modified-Since", new Date().toUTCString());
}
})
なんで治るのかというか、そもそもなんのエラーなのか
リクエストヘッダーの以下の値の評価がfalseになってしまうらしい←
(リクエストヘッダーって、なんぞ、っていう。。
すみません、詳しい方いたら補足もらえると嬉しいっす。)
- If-Match
- If-None-Match
- If-Unmodified-Since
ということで、そのうちの1つ、If-Unmodified-Sinceに最新データを渡してあげて、最新データと認識させてあげる。
調べると、chromeでもエラー出てるケースもあるみたいで、果たしてこの方法が良いのか悪いのか。
・・・
Author And Source
この問題について(ajax読み込みでFailed to load resource: the server responded with a status of 412 (Precondition Failed)が出る場合), 我々は、より多くの情報をここで見つけました https://qiita.com/ryoYanagi/items/92f93a8d15e1af08de16著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .