为什么jquery为此代码提供了“选择器未定义”错误?

时间:2011-11-16 23:40:06

标签: jquery xml ajax

我真的在努力解决一个问题,我希望这里有人会花一些时间来帮助我。我正在尝试使用jQuery 1.6.2和JQM 1.0rc3在xml文档中找到名为“Emotion”的子节点的最后一个文本选择。我正在使用的XML文档具有以下结构。

<StatusModel>
 <Uid>5e4dc88f-f703-4e34-92f6-609216de6c6f</Uid>
 <Created>Wednesday, November 02, 2011 2:20 PM</Created>
 <User>larry_irons</User>
 <Level>2</Level>
 <Doing>typing</Doing>
 <Thinking>the pain in my neck</Thinking>
 <Emotion>Pain</Emotion>
</StatusModel>

以下ajax代码检索整个xml文档,我在firebug的控制台中看到了成功的Get。但是,我还收到“选择器未定义”错误消息,并且该函数无法检索Emotion的文本,因为“var tracking”声明尝试执行此操作。 ajax如下:

$('#feeling').live('pageinit', function (event) {


    $.ajax({
        type: "Get",
        url: "/api/list",
        cache: false,
        dataType: 'xml',
        success: function (xml) {

            manipulateType(xml);
        }


    });

    function manipulateType(xml) {

        //empty the emotion_type div
        $("#emotion_type").html("");

        //retrieve current emotion to track and append to div emotion_type
        $(xml).find('StatusModel').each(function () {

            var tracking = $(this).find("Emotion").text();


            //append content and tracking variable to div emotion_type
            $('#emotion_type').append("On a scale of 1 (low) to 10 (high) I'm feeling this much&nbsp;" + tracking + ':');

            //refresh the review data div #summarylist
            $('#emotion_type').live("refresh");

        });
    }
});

我假设错误消息是由“var tracking”声明产生的。但是,我的应用程序中的另一个页面运行几乎相同的代码而没有错误消息。如果有人愿意让我参与这个问题,我需要两点建议。

你能看到我如何宣布选择器的任何明显问题吗?

您能否提供一些有关我如何修改它的信息,以便它返回xml文档中“Emotion”的最后一个子节点的文本?

更新:我改为jquery.mobile-1.0.js和jquery-1.6.4.js。错误仍然存​​在。

1 个答案:

答案 0 :(得分:0)

您是否将数据作为字符串获取?在这种情况下,您需要通过浏览器窗口.DOMParser(firefox,chrome)或ActiveXObject(IE)。我怀疑它是真正的选择器,看起来很好。

此外,最好在迭代之前保存对$(“#emotion_type”)的引用(并选择更好的名称:)。

function manipulateType(xml) {
    var emo = $("#emotion_type");

    //empty the emotion_type div
    $(emo).html("");

    //retrieve current emotion to track and append to div emotion_type
    $(xml).find('StatusModel').each(function () {

        var tracking = $(this).find("Emotion").text();


        //append content and tracking variable to div emotion_type
        $(emo).append("On a scale of 1 (low)...");

        //refresh the review data div #summarylist
        $(emo).live("refresh");

    });
}