У меня есть следующий вызов ajax, который работает отлично в Firefox и Chrome, но не IE:
function getAJAXdates( startDate, numberOfNights, opts ) {
var month = startDate.getMonth() + 1;
var day = startDate.getDate();
var year = startDate.getFullYear();
var d = new Date();
var randNum = Math.floor(Math.random()*100000000);
$.ajax({
type : "GET",
dataType : "json",
url : "/availability/ajax/bookings?rand="+randNum,
cache : false,
data : 'month='+month+'&day='+day+'&year='+year+'&nights='+numberOfNights,
contentType : 'application/json; charset=utf8',
success : function(data) {
console.log('@data: '+data);
insertCellData(data, opts, startDate);
},
error:function(xhr, status, errorThrown) {
console.log('@Error: '+errorThrown);
console.log('@Status: '+status);
console.log('@Status Text: '+xhr.statusText);
}
});
}
Я знаю для того, что все переменные передают правильное содержание, и $ .ajax действительно передает всю парамать/значения.
Это - то, что я вхожу в ошибку:
ЖУРНАЛ: @Error: неопределенный ЖУРНАЛ: @Status: ЖУРНАЛ parsererror: текст @Status: хорошо
Я знаю о проблеме кэша о IE и реализовал случайную парамать для разрешения его.
Вот JSON, который я возвращаю (я могу видеть, что он использует Charles),
{
"availability":[
{
"inventory_id":"5",
"booking_id":"21",
"start_date":"05-01-2010",
"number_nights":4,
"text":"deFrancisco, Martin - $500.00 ACTIVE",
"type":"BOOKING"
}
]
}
Наконец это заголовки, которые передают обратно от бэкенда:
header('Content-Type: application/json; charset=utf8');
header("Cache-Control: no-cache");
header("Expires: 0");
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
Какие-либо идеи?
Я бы закомментировал contentType и добавил dataType: "json"
из http://api.jquery.com/jQuery. ajax /
dataType: Тип данных, которые вы ожидаете от сервера.
contentType: При отправке данных на сервер используйте этот тип содержимого.
вы указываете, что отправляете json, но это не так - может быть, проблема в этом?
В большинстве случаев ошибки синтаксического анализа IE вызваны лишними запятыми. Например, [1, 2, 3,]
действителен в FF, но не в IE. В любом случае, вы должны вставить ответ JSON, без этого невозможно определить проблему.
Какую версию jQuery вы используете?
Если вы проверите код jquery, при вызове jQuery.httpData () выдается ошибка parsererror. Вот код из jquery:
if ( status === "success" ) {
// Watch for, and catch, XML document parse errors
try {
// process the data (runs the xml through httpData regardless of callback)
data = jQuery.httpData( xhr, s.dataType, s );
} catch(err) {
status = "parsererror";
errMsg = err;
}
}
Возможно, стоит взглянуть на jQuery.httpData (). То есть вы можете проверить, вызывается ли jQuery.parseJSON и действительно ли он возвращает объект.
if ( typeof data === "string" ) {
// Get the JavaScript object, if JSON is used.
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
console.log(data); //add this
data = jQuery.parseJSON( data );
console.log("data parsed successfully"); //add this
Что если вы просто наберете alert (data);
или var myObject = eval ('(' + data + ')');
?
И если вы позвоните функция прямо из браузера, набрав в строке URL-адреса ваш вызов ajax со всеми параметрами в "get" (& param1 = param1value & param2 = ...)? Вы должны уметь прочитать ответ.
Что-то в ответе JSON сводит IE с ума.
Проверьте, не возвращается ли ваша страница ОК
или, если он возвращает «ОК»
. Только «ОК»
является допустимым JSON. Используйте такой инструмент, как JSONLint , чтобы проверить значение, полученное в результате запроса.