0

我被分配了一个涉及大量 jQuery 的项目。我很容易使用它,但是以前的开发人员使用了以下代码,这对我来说是全新的,我不知道它的作用。

$.extend({
    ay: {
        ajaxRequest: {
            abort: function(){}
        }
    }
});

我可以说这ay是所有项目的配置文件和模板所在的目录名称。任何人都可以解释这段代码吗?谢谢

我还在项目中看到了这段代码:

$.ay.ajaxRequest = $.ajax({
    data: {
        ay: {
            action: 'update',
            element: {
                id: $(this).data().id
            },
            input: {
                name: $(this).attr('name'),
                value: $(this).val()
            }
        }
    },
    type: 'post'
});​

在这个示例代码中,没有 php 脚本的 url 或路径,你能解释一下吗?

4

2 回答 2

4

他正在使用jQuery.extend()扩展jQuery来添加一个ay属性,这是一个具有ajaxRequest属性的对象,这是另一个具有abort空函数(noop)属性的对象。

所以你可以这样做;

jQuery.ay.ajaxRequest.abort();

如果你愿意,它绝对不会做任何事情。

至于为什么这是有用的;您必须检查其余代码以查看他在哪里调用它。

有关扩展 jQuery 的更多信息,请参阅文档

编辑:为了解决第二部分,如果他在您看到该代码之前扩展 jQuery,那么他将ajaxRequest替换jQuery.ajax(). 如果他在该代码之后扩展 jQuery,那么他将覆盖该abort()方法而不做任何事情;基本上没有人可以取消 AJAX 请求。

这样jQuery.extend()做很奇怪,我会这样做:

jQuery.ay.ajaxRequest.abort = jQuery.noop;

他必须使用jQuery.ajaxSetup()(设置 AJAX 默认值)声明该 AJAX 请求的 URL。

于 2012-05-23T10:06:49.010 回答
1

该代码向 jQuery 对象 ($) 添加了一个名为 ay 的属性,从而使代码成为$.ay.ajaxRequest.abort()可能。

如果您传递一个参数来扩展该参数,它将扩展它自己的 jQuery 命名空间。这意味着参数的每个属性都将被克隆到 jQuery 对象中。在您的情况下,有一个名为 ay 的属性被克隆到 jQuery 对象中。使用具有一个属性的对象调用 extend 等于

$.ay = {
          ajaxRequest : {...}
       };
于 2012-05-23T10:06:35.623 回答