2

该代码不仅更改了 JQuery 版本。ajax 调用的简化版本是:

   $.ajax(
    {
        type: 'GET',
        url: MapPath($(this).attr('path')),
        cache: false,
        data: '{}',
        dataType: 'html',
        success: function (result) {
            console.log(result);
            if ($(result).filter('#feedback').length > 0) {
                $('#center').children(':first').before($(result).filter('#feedback').outerHTML());
            }
            else {
                $('#feedback').remove();
                $('#dialog').html(result);
                $('#dialog').dialog('option', 'title', 'Edit Mailbox');
                $('#dialog').dialog('open');
            }
        }
    });

就在 if 语句之前,我记录了结果。它按预期显示这是一个格式正确的 HTML 片段。片段意味着它包含一个带有子元素的 DIV。当我在 if 语句中使用选择器时,出现错误:

throw Error("Syntax error, unrecognized expression:

我可以使用控制台查看结果的内容,如果我尝试任何选择器,我会收到错误消息。如果我只是使用,我什至会收到错误:

$(result)

但是,如果我修改结果并预先<html><body>添加和附加,</body></html>那么它可以正常工作。是什么改变了 JQuery 来打破这个问题,我该如何解决?结果需要是一个 HTML 片段,因为我将页面上的容器设置为该值。

4

1 回答 1

1

由于我看不到您的 html 字符串,因此我无法准确指出导致它无法使用的确切原因$(),但是修复它应该像先使用$.parseHTML()on一样简单result。如果不能正确解析,则 html 无效。

result = $.parseHTML(result);
console.log(result);
if ($(result).filter('#feedback').length > 0) {
    $('#center').children(':first').before($(result).filter('#feedback').outerHTML());
}
else {
    $('#feedback').remove();
    $('#dialog').html(result);
    $('#dialog').dialog('option', 'title', 'Edit Mailbox');
    $('#dialog').dialog('open');
}
于 2013-05-08T15:21:43.503 回答