JQuery AJAX работают в Mozilla, но не IE - PullRequest
3 голосов
/ 15 декабря 2009

Я знаю, что jquery / ajax в IE - распространенная проблема. Здесь есть много полезных советов по переполнению стека, но ни один из них мне пока не помог. Следующий код прекрасно работает в Firefox, но не в IE:

$.ajaxSetup({ cache: false })
$.ajax({
 url: 'FunDataService.asmx/' + funDataMethod,
 type: 'POST', dataType: 'html', cache: false, timeout: 3000,
 error: function() {alert('Error updating fun information.  Refresh the page and try again.');},
 success: function(htmlFunInfo) {
  alert($(htmlFunInfo).text());
  $("#fundiv").html($(htmlFunInfo).text())},
 data: parameters
});

Вы можете увидеть мои попытки кеширования ; Я также добавил случайные значения в URL. Я также попытался добавить различные заголовки контента в веб-сервис:

'        Context.Response.ContentType = "text/html; charset=utf-8"
'        Context.Response.ContentType = "text/html"
Context.Response.ContentType = "text/plain"

Команда alert предназначена для отладки. В FF $(htmlFunInfo).text() - это теги div, отправленные с сервера, который я хочу вставить. В IE это пустая строка.

Кто-нибудь знает, как получить доступ к этому строковому значению в IE? Спасибо!

Редактировать Ответ от сервера выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="tempuri.org/">
  <div>stuff</div>
  <div>more stuff</div>
</string>

Я все больше думаю, что это не так, что мне нужно избегать обтекания div.

Редактировать 2 Вот и все! В коде моего сервера я заменил:

Return RemarkHtml

с

Context.Response.Write(RemarkHtml)

Это позволило избежать тегов, окружающих div, и теперь я в порядке. Тем не менее, я думаю, что это большая проблема, что в IE вы просто не можете получить доступ к тегам с помощью .text ().

Спасибо, ребята!

Ответы [ 3 ]

5 голосов
/ 15 декабря 2009

вместо

alert($(htmlFunInfo).text());
$("#fundiv").html($(htmlFunInfo).text());  

Попробуйте

alert(htmlFunInfo);
$("#fundiv").html(htmlFunInfo); 

Проблема заключается в том, что вызовы .text() и .html() получают текст и HTML содержимое выбранных узлов. Похоже, что то, что вы хотите здесь сделать, это ввести весь ответ в #fundiv.

2 голосов
/ 15 декабря 2009

вы пытались изменить опцию jQuery Ajax dataType на 'text'?

$.ajaxSetup({ cache: false })
$.ajax({
 url: 'FunDataService.asmx/' + funDataMethod,
 type: 'POST', 

 dataType: 'text', // instead of 'html'

 cache: false, 
 timeout: 3000,
 error: function() {
     alert('Error updating fun information.  Refresh the page and try again.');
 },
 success: function(htmlFunInfo) {
    alert($(htmlFunInfo).text());
    $("#fundiv").html($(htmlFunInfo).text())
 },
 data: parameters
});

EDIT:

Альтернативой может быть метод jQuery .load (). Он добавляет результат ответа AJAX к выбранному объекту jQuery. Вероятно, вы можете использовать ajaxSetup () для настройки ajaxOptions для запроса.

.load () документ:

http://docs.jquery.com/Ajax/load#urldatacallback

$.ajaxSetup({
 type: 'POST', 
 dataType: 'text', 
 cache: false, 
 timeout: 3000,
 error: function() {
     alert('Error updating fun information.  Refresh the page and try again.');
 },
 data: parameters
});

$("#fundiv").load( 'FunDataService.asmx/' + funDataMethod );
1 голос
/ 15 декабря 2009

Я не совсем понимаю, почему это работает в FF, а не в IE, но я предполагаю, что это как-то связано с различиями в том, как каждый браузер создает иерархию узлов.

В любом случае содержимое внутри переменной htmlFunInfo является строкой, поэтому нет необходимости вызывать text (). Как говорит Джейсон, это должно сработать, если вы уберете .text ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...