Vì một số lý do, IE yêu cầu chúng tôi tải xuống tệp thay vì chạy tệp đó dưới dạng ajax. Điều này làm việc trong tất cả các trình duyệt ngoại trừ IE. Tôi đã cố gắng rối tung với các tiêu đề mà nó trả về mà không có may mắn.Lỗi phản hồi Ajax và JSON trong Internet Explorer (hoạt động trong tất cả các trình duyệt khác)
Chức năng lấy dữ liệu biểu mẫu, sau đó đăng bài, câu trả lời là một mảng có thể là số lượng các mục cần cập nhật trên trang.
Giả sử của nó không được giả định là tệp giả sử của nó chỉ là phản hồi json.
PHP
header('Content-type: application/json');
$error = "The Email and Password you entered could not be resolved.";
$elements[0]['target'] = '.error_report';
$elements[0]['action'] = 'inside';
$elements[0]['data'] = '<p>'.$error.'</p>';
$this->output->set_output(
json_encode(array("elements" => $elements))
);
Javascript
$(document).ready(function() {
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
error: function() {
alert("Request was not successful. Please try again shortly.");
}
});
$(document).ajaxSuccess(function (e, xhr, settings) {
var response = xhr.responseText;
if (settings.dataType != 'json') {
return;
};
try {
response = jQuery.parseJSON(response);
} catch (e) {
alert(e);
return;
}
if (response.elements instanceof Array) {
var reqs = ['target', 'action'];
var valid = true;
for (var i=0;i<response.elements.length;i++) {
var cur = response.elements[i];
var sel;
for (var j=0;j<reqs.length;j++) {
if (typeof cur[reqs[j]] !== "string") {
valid = false;
break;
};
};
if (!valid) {
continue;
};
sel = $(cur.target);
switch (cur.action) {
case "inside":
sel.html(cur.data);
break;
case "instead":
sel.replaceWith(cur.data);
break;
case "remove":
sel.remove();
break;
case "refreshPage":
window.location.reload();
default:
if (typeof sel[cur.action] === "function") {
sel[cur.action](cur.data);
}; // else continue
break;
};
};
};
// Dispatch the AJAX request, and save it to the data object so that
// is can be referenced and cancelled if need be.
self.data('ajaxify.xhr', jQuery.ajax({
url: this.action,
type: 'post',
dataType: options.dataType,
data: (beforeSubmitIsJquery ? beforeSubmitResult.serialize()
: self.serialize()),
success: function (/**/) {
cleanup();
options.onSuccess.apply(that, arguments);
},
error: function (/**/) {
cleanup();
options.onError.apply(that, arguments);
},
complete: function (/**/) {
options.onComplete.apply(that, arguments);
}
}));
Cố gắng đặt 'contentType' thành' application/json' trong yêu cầu '.ajax' của bạn. – BrunoLM
Tôi muốn cung cấp 200 điểm cho một tiền thưởng cho điều này nhưng nó sẽ không cho phép tôi làm điều đó phụ hai ngày: ( – Walker
Đã cố gắng thích ứng với loại nội dung: Nếu chúng ta chuyển từ tiêu đề sang văn bản thuần hoặc json nó tải một trang mới với phản hồi JSON trên nó - thay vì tải xuống câu trả lời giống như tiêu đề contentType (cả hai đều sai) – Walker