JQuery не может использовать ответ AJAX в качестве контекста в IE - PullRequest
2 голосов
/ 10 октября 2009

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

Некоторые выводы:

  1. Проблема никогда не возникает в Firefox
  2. Проблема возникает только в IE, когда вы вошли в систему как пользователь в SharePoint с определенным количеством разрешений, в результате чего генерируется определенный дополнительный html для облегчения административных функций. Я пришел к выводу, что именно этот дополнительный HTML вызывает проблему.

К сожалению, я не контролирую созданный html, так как он генерируется SharePoint.

Я выделил проблему и создал простую тестовую страницу , чтобы вы могли на нее посмотреть.

Ответы [ 3 ]

4 голосов
/ 12 октября 2009

Проблема заключается в том, как jQuery создает экземпляр html, переданный ему, возможно, не хватает хорошей кросс-браузерной методики анализа строк (например, createContextualFragment в Mozilla).

Чтобы быть конкретным, в функции очистки jQuery есть два регулярных выражения, которые необходимо исправить:

857: var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
874: elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){

Оба из них не смогут обрабатывать теги с двоеточием в имени.

Исправление:

857: var match = /^<([\w:]+)\s*\/?>$/.exec(elems[0]);
874: elem = elem.replace(/(<([\w:]+)[^>]*?)\/>/g, function(all, front, tag){
0 голосов
/ 11 октября 2009

Я ничего не вижу в Firefox, и это потому, что этот бит в вашем коде неверен:

google.load("jquery", "1.2.6");          //ok
google.setOnLoadCallback(function() {    //ok
   $(document).ready(function()          //not ok, can't be sure if will fire
      {  
         // great stuff here 
      }
   );
});

См. это для пояснения, документ может быть (действительно, в Firefox) уже прочитан при вызове LoadCallback от Google.

Если вы можете исправить этот бит, мы можем дополнительно исследовать его с помощью firebug, чтобы увидеть, где работает скрипт.

0 голосов
/ 10 октября 2009

из того, что я понял, вы можете попробовать "селектор в синтаксисе URL", чтобы перезагрузить только определенные части страницы

$("#somediv").load(location.href + " #somediv");

плюс, добавьте случайный параметр, чтобы избежать проблем с кешем:

$("#somediv").load(location.href + "?r=" + Math.random() + " #somediv");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...