jquery不能在IE中使用ajax响应作为上下文

时间:2009-10-10 18:30:54

标签: jquery ajax sharepoint callback

我的问题是在我的ajax回调中,当我将查询的上下文设置为我的ajax调用的返回html时,它找不到任何元素。

一些调查结果:

  1. Firefox中不会出现问题
  2. 只有在SharePoint中以具有一定权限的用户身份登录时才会出现此问题,从而导致生成某些额外的html以方便管理功能。我得出结论,正是这个额外的HTML引起了问题。
  3. 不幸的是,我无法控制生成的html,因为它是由SharePoint生成的。

    我已将此问题隔离开来并创建了a simple test page供您查看。

3 个答案:

答案 0 :(得分:4)

问题在于jQuery如何实例化传递给它的html,可能缺少一个良好的跨浏览器字符串到dom解析技术(例如Mozilla上的createContextualFragment)。

具体来说,jQuery的clean函数中有两个正则必须修复:

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){

答案 1 :(得分:0)

从我的理解你可能想尝试“url语法中的选择器”来重新加载页面的特定部分

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

加上,添加一个随机参数以避免缓存问题:

$("#somediv").load(location.href + "?r=" + Math.random() + " #somediv");

答案 2 :(得分:0)

我在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 
      }
   );
});

请参阅this以获得澄清,当调用来自谷歌的LoadCallback时,文件可能已经(实际上在Firefox中)已经被重命了。

如果你能纠正那一点,我们可以用firebug进一步调查它,看看剧本在哪里经纪。