ウェブ上のあらゆる場所でこれを見ましたが、この問題を回避するためにコードを修正できませんでした。単にボタンをクリックしたときにトリガーするajax関数があります。 、asyncのChromeとSafari ajaxの問題
$(document).on('click', '.ad-single', function() {
var addataObj = doAjax('post_requests', 'get-ad-info', {"id": $(this).data('ad')}, '158', false); // false means DON'T hide the indicator
if (addataObj) {
loadContent(addataObj.ad);
}
});
OK:私は時々、インジケータ(ロードアニメーション)が表示しないようにしたいので、私は私の機能の構築:
function doAjax(action, todo, items, error_num, hide_indicator) {
items.action = action;
items.do = todo;
var postedObj;
$.ajax({
type: 'post',
dataType: 'html',
url: ajaxURL,
data: items,
async: false,
beforeSend: function() {
if (!hide_indicator) showIndicator();
},
success: function(data) {
if (data) {
ajaxObj = JSON.parse(data);
if (ajaxObj.ok) {
postedObj = ajaxObj;
} else {
alert(ajaxObj.error);
postedObj = false;
}
} else {
alert('[' + error_num + '] Something went wrong.');
postedObj = false;
}
if (!hide_indicator) hideIndicator();
},
error: function() {
alert('[' + error_num + '] Something went wrong.');
postedObj = false;
if (!hide_indicator) hideIndicator();
}
});
return postedObj;
}
そして、ここで私は、関数を呼び出すために私のボタンの上に何をすべきかですが今のところ、Firefoxですべてが正常に機能します。私のボタンをクリックすると、インジケータが表示され、データがajaxによって返されるまで待ってから、再度インジケータを非表示にします。
これはChromeとSafariでは機能しません。この関数は正常に動作し、期待どおりのデータを返しますが、hideIndicator()
関数がすぐに呼び出されたようで、これを修正する方法がわかりませんでした。
のFirefox:
ChromeとSafariの:
schronous呼び出しでブロックがロックされるため、ページに更新時間がありません。私はこの同じ質問と重複がたくさんあると確信しています。 – epascarello
私はそれを知っていますが、私の 'loadContent'関数に空を返すので、私はそれを取り除くことができません! – tinyCoder
これは、非同期呼び出しのためにコードが非同期要求を処理するようにする理由です。 – epascarello