jQuery - 将XML数据作为选项传递给插件

时间:2009-12-10 16:33:00

标签: jquery

这是我试图理解和修改的某些代码......

基础知识是我试图获取一些XML并将其加载到自定义插件中。

我有以下内容(被点击的PHP页面采用dothis属性并基于它进行切换,返回整数或实际的XML):

(function() {

var CountResult = function() {

    var count = 0;
    $.ajax({ 
        async: false,
        url: 'getstuff.php', 
        data: {dothis: 'countit'}, 
        type: 'POST',
        success: function(data) {
            count = $(data).find('returned').text();
            count = $.trim(count);
        }
    });

    return count;
}; 


var LoadResult = function(stuff1, stuff2) {

    $.post('getstuff.php',
        {stuff1: 'one', stuff2: 'two', dothis: 'getit'},

        function(data) {

            //do stuff with returned data

        }

    ); 

};


$(function() {

    $('#SomeDiv' ).myPlugin({
        countMethod: CountResult,
        loadRowsMethod: LoadResult
    });

    });

})();

我对此有一些疑问:

  1. 为什么顶部的匿名函数缺少jquery $?我希望看到(function($){}而不是(function(){}。如何使用底部$(function() {}的常规jquery调用?任何人都可以解释一下吗?

  2. 传递给插件的方法点击了一个PHP页面,该页面返回有关XML文档的所需数据(PHP会对文档中的节点进行计数,将其返回到名为“返回”的节点中或返回节点本身,包含在“返回”节点中)。使用jQuery直接获取XML,绕过PHP页面不是更有效吗?我该怎么做?由于插件实际调用CountResultLoadResult,我如何检索XML并将计数添加到插件选项countMethod中,然后将XML本身插入loadRowsMethod?但是插件需要函数,而不是普通的值。有没有最好的方法来做这种事情?

  3. 创建如下函数的目的是什么:

    var Something = function(){}

    而不是:

    function Something(){}

  4. 编辑:我遇到的主要问题是希望直接在jQuery中加载XML而不是通过PHP。我无法看到如何做到这一点,获得结果并将相关数据传递到我在这里的框架内的两个私有函数中。也许这不是以这种方式完成的?不确定。

1 个答案:

答案 0 :(得分:1)

  

我遇到的主要问题是缺乏   直接在jQuery中加载XML   而不是通过PHP。我不能   看看如何做到这一点,得到结果   并将相关数据传递给   内部的两个私人职能部门   框架我来到这里。也许吧   是不是应该这样做?不   肯定的。

他们没有编码来做到这一点...他们被设计为自己获取数据...所以简而言之 - 你需要制作自己的函数来传递与硬编码的函数相同的东西插件(不包括您认为适合的更改 - 比如使用xml文件而不是php,或只加载xml文件一次而不是每次调用函数)。


$(function() {});是$(document).ready(function(){})的缩写;

您只需要使用(function($){})(jQuery)与jQuery.noConflict()兼容,并在插件代码中使用命名空间$ = jQuery。如果您不担心这一点并在全球范围内使用$,那么如果你传入'$'就没有区别。承认与noConflict的比较在世界上是必须的,但它会以任何方式工作 - 直到你无论如何都需要noConflict。

就插件期望功能而言... jsut传递的匿名函数如:

$('#SomeDiv' ).myPlugin({
        countMethod: function(){/*body*/},
        loadRowsMethod: function(){/*body*/}
    });

就你定义函数的方式而言......当你执行var myfunc = function(){};时,这意味着函数只存在于创建函数的范围内(例如在执行它定义的函数时) - 而我相信定义像function myfunc()这样的函数会使该函数成为全局函数(附加到窗口对象)。