0

我对 JQuery 脚本有一些疑问(我是 JQuery 世界的新手):

在视图页面中,我有以下链接:

        <li>
            <a id="byHeader" href="<c:url value="/mapping/header" />">By presence of header</a>
        </li>

因此,单击此链接我会生成一个指向“/mapping/header”文件夹的 HTTP 请求。

现在在视图页面中,我还有以下与先前链接相关的 JQuery 代码:

$("#byHeader").click(function(){    // Select the link having id="byHeader" and  assign to it the following callback function executed on the click event
    var link = $(this);             // Variable refered to the link tag that triggered the event

    /* La chiamata AJAX non viene invocata su un oggetto particolare (quindi direttamente su $)
       I parametri di input sono: 1) L'URL del link selezionato 2) Il tipo di risposta previso (una stringa)
    */
    $.ajax({ url: this.href, dataType: "text", 
        // Before sending the HTTP Request: execute a function that add an Header to this HTTP Request
        beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }, 
        // Success case:
        success: function(form) { 
            MvcUtil.showSuccessResponse(form, link); 
        }, 
        // Error case:
        error: function(xhr) { 
            MvcUtil.showErrorResponse(xhr.responseText, link); 
        }
    });
    return false;
});

可能我的怀疑是微不足道的,取决于我对 JQuery 缺乏了解......

1)第一个不考虑这行代码中的req变量:

        beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); },

通过这行代码,我认为我正在向我的 HTTP 请求添加一个标头以将其发送到服务器。

我的问题是了解它指向名为“req”的变量。我认为这是指我的 HTTP 请求,但我的问题是我之前从未声明过它......我正在使用它(并且它运行良好)而之前从未在代码中声明过它!为什么它起作用?

我在想,当我使用 beforeSend 时,它会自动创建一个参数变量,其中包含对我的函数的 HTTP 请求的引用......但是......最后我不知道它是否正确......

2)关于这些代码行的第二个疑问:

        success: function(form) { 
            MvcUtil.showSuccessResponse(form, link); 
        }, 

这些代码行处理成功的情况(脚本能够将标头附加到 HTTP 请求的情况)...

阅读 JQuery succes api 文档我了解成功方法(它是一种方法吗?对吗?)接受从服务器返回的数据作为参数...

正如您在代码中看到的那样,服务器向客户端返回一个文本字符串(实际上我有:dataType:“text”)......所以......为什么在前面的代码行中参数被命名为“form”?

服务器向客户端返回文本,而不是“表单”......我错过了什么?

而且......也在这种情况下:我没有创建表单变量,它是一个包含服务器返回的数据的“通用”变量,我可以使用它,因为在前一行中我使用了 JSON 格式阿贾克斯调用?

非常感谢你

安德烈亚

4

1 回答 1

0
  1. jQuery ajax 系统req为您创建并将其作为参数传递给您的回调。

  2. 不知道,只是一个奇怪的变量名称......你是对的,如果你的dataTypeis text,结果将作为一个纯字符串出现。

    至于您不创建变量,返回的数据(在本例中为字符串)再次由 jQuery 创建,并作为回调的参数传递。

您似乎对“变量”和“函数参数”的概念感到困惑。我建议阅读更多关于“全局变量”和“变量范围”的信息。简而言之,req并且form只能从这些函数内部获得,它们之外的代码将无法访问它。OTOH,如果您在var x某处声明变量,则同一范围内的每个代码都可以访问它(如果您在任何函数之外声明它,它将是全局的,因此您的所有代码都可以访问它)。

于 2012-11-19T23:34:48.270 回答