jQuery的.html()方法在Chrome和Safari中无法工作

4

我正在尝试使用GET方法获取HTML数据,并使用.html()方法将其添加到div中以显示弹出窗口。以下是我为此编写的代码。在IE和Firefox中可以正常工作,但在Chrome和Safari中失败。

function openPopupWindow(url, width) {
      $.ajax({
          url: url,
          type: 'GET',
          timeout: 180000,
          success: function(data){
           var popUpBody = $("div.popupDivClass").html(data);
           $(popUpBody).dialog({
                autoOpen: false,
                        resizable: false,
                        width:width,                  
                        modal: true
                  });
           //$("div.ui-dialog-titlebar").hide();
            $(popUpBody).dialog( "open" );
          }
      });
}

我遇到了以下异常:

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 - jquery-1.4.4.min.js:122

有什么建议吗?

你尝试将哪些 HTML 放入弹出框的主体中? - Alastair Pitts
它具有HTML代码以显示文本、单选按钮、下拉菜单和提交按钮。当我尝试警报“数据”时,它会显示整个HTML内容,例如<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="w3.org/1999/xhtml"><head>; <body> <ui:define name="preIdContent" /><ui:define name="postIdContent"><h:panelGroup columnClasses="palletPopupstyle" >.. - kkm
4个回答

5

您需要删除DOCTYPE的任何引用。例如,我遇到了同样的问题,我删除了以下行,它就像魔法般地工作:

<!doctype html public "*">

我已经删除了<!DOCTYPE html>,但在Safari中仍无法正常工作...它在其他浏览器中可以工作。 - Vijay Kumar

0

可能是因为您选择了$("div.popupDivClass"),这可能是多个元素。而html(data)不知道如何从元素数组中返回内容。尝试使用以下代码:

$("div.popupDivClass").each(function ()
    {
        $(this).html(data);
    })

或者尝试通过id进行选择

注意:但不保证成功。


仍然没有运气。我已经在父HTML中定义了popupDivClass div。在数据字段中,我得到的HTML内容如下:<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <body><form id="itemPopupForm" name="itemPopupForm" method="post" action="/enewitem/pages/createItemType.jsf" enctype="application/x-www-form-urlencoded"><input type="hidden" ..> 我们需要根据浏览器定义DOM遍历类型吗? - kkm
@kkm,你能定义一下 id 吗? - S L
您可以在多个选择器上设置.html()。请参见此jsFiddle:http://jsfiddle.net/9yttC/ - Alastair Pitts
@AlastairPitts,这可能涉及到打开多个对话框...我不确定。 - S L

0
以下两行代码引起了问题。 我从数据字符串中删除了以下代码,现在在Chrome和Safari中可以正常工作:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

0

为了帮助其他遇到Chrome和可能的Safari问题的人,我想说一下。看起来Chrome对使用jquery.html()插入的内容非常挑剔。

我发现了两种情况,当Chrome出现错误:INVALID_STATE_ERR:DOM异常11时会引发异常:

  • 插入错误的HTML代码。比如忘记用/关闭标签。所以$('body').html("<button value='This is a button'>");会导致异常11。解决这个问题很容易,只需要插入有效的XHTML即可。

  • 在Chrome控制台中尝试这个命令$('body').html("C&aacute;psula");。那里的问题是&符号。我的(几乎)解决方案是将&符号转换为Unicode,例如$('body').html("\u0026psula"); \u0026是&。请注意,&符号不是唯一与Chrome对抗的符号。

也许页面编码与此有关。

所以你的问题可能是返回Ajax数据的数据变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接