2009-08-19 5 views
0

У меня есть код на клиенте, который вызывает обработчик ashx с использованием $ .ajax() и ожидает json-данных с сервера. Все работает отлично на FF, IE 6,7,8, когда я запускаю приложение на локальном веб-сервере. Однако, когда я развертываю приложение на удаленном тестовом сервере, IE перестали работать ($ .ajax возвращает parsererror), в то время как FF продолжает работать, как ожидалось.jQuery ajax не работает удаленно на IE

Моя первая мысль заключалась в том, что у моего объекта json должна быть пробная запятая, которую IE ненавидят, но это не было проблемой, поскольку не было никаких пробных запятых. Затем я попытался изменить различные вещи, такие как типы содержимого от app/json до tex/plain, по-прежнему та же ошибка.

Что-то, что я нашел странным, заключается в том, что если я запустил скрипач, тогда IE будут работать удаленно, иначе я получаю parsererror.

Кто-нибудь испытал что-то подобное раньше? Благодарю.

$.ajax({ 
     type: "GET", 
     url: "handlers/GetAsyncResults.ashx", 
     contentType: "application/json; charset=utf-8", 
     data: {'from': dateFrom, 'to': dateTo, 'accountId' : aId, 'page': currentPage, 'sortField' : sortField, 'sortDirection' : sortDirection}, 
     dataType: "json", 
     success: function(data) { GetAsyncResultsEnd(data); }, 
     error: function(x, y, z) { GetAsyncResultsErrorHandler(x, y, z); } 
    }); 

EDIT: добавлен фрагмент кода.

+0

Можете ли вы добавить фрагмент кода клиента? – ChaosPandion

+0

Попробуйте добавить? R = 9028374 (некоторая случайная строка), чтобы подтвердить, что это не кеширование. –

+0

Является ли обработчик ashx на том же сервере, что и документ, который его называет? –

ответ

0

Единственное, что дало мне ошибку синтаксического анализа, прежде чем он недействителен JSON. Вы сказали, что вы проверили трейлинг-пространства, но попробуйте запустить json через - JSON Lint. Это хорошо сработало для меня. Это интересно, хотя помогает скрипач.

+0

Только что попробовал Json Lint, мои jsons действительны в соответствии с сайтом. Благодарю. –

+0

Две вещи - можете ли вы опубликовать пример своего ответа JSON? И я не использовал json-тип JQuery. Я всегда взял текст и провел его через Крокфордс JSON.parse. Было бы интересно узнать, сохраняется ли проблема при использовании этого метода, но, возможно, JQuery использует свой парсер JSON. – Brian

0

Попробуйте использовать

contentType: 'application/json', 
+0

Пробовал это, все та же ошибка в IE. Благодарю. –

1

Это отсортированный. Благодарю.

На стороне сервера, после того, как мы назвали context.Response.Write ('Наши данные JSON'), затем мы называем context.Response.Flush() и context.Response.Close(). После удаления .Flush() и .Close() все снова заработало. Но я до сих пор не могу объяснить, почему он работает для firefox, а не IE, и как волшебник сделал это для IE.

спасибо.

0

Вы пробовали просто удалив тип данных: «» JSON

я имел такую ​​же проблему и удаления, что установил ее. Удаление, которое позволяет jQuery «интеллектуально передавать либо responseXML, либо responseText для вашего обратного вызова».

0

В моем методе ashx.cs мне пришлось прокомментировать Flush(), чтобы это работало.

До этого мой json был хорошо сформирован, и все, казалось, сработало, но JavaScript (JQuery .ajax POST-вызов) ничего не вернет, FireBug не сообщит об ошибке, консоль не сообщила об ошибке , ничего. Все это работало локально (в Visual Studio), но не тогда, когда все было на сервере.

//code from the ashx.cs file... 
//...after populating the response, resp: 

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
String json = jsonSerializer.Serialize(resp); 

r.Write(json); 
//r.Flush(); /////commented out! It returns to the .js file correctly! 
....