关于JQuery中ajax调用的一些疑问

时间:2012-11-19 23:25:32

标签: jquery ajax json

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

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

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

因此,点击此链接,我会向“/ mapping / header”文件夹生成HTTP请求。

现在在视图页面中,我还有以下与previus链接相关的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)第一个dount考虑这行代码中的req变量:

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

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

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

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

2)第二个疑问是这些代码行:

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

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

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

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

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

而且......在这种情况下:我还没有创建变量形式,它是一个“泛型”变量,包含服务器返回的数据,我可以使用它,因为在previus行中我使用了JSON ajax调用中的格式?

非常感谢

安德烈

1 个答案:

答案 0 :(得分:0)

  1. jQuery ajax系统为您创建req并将其作为回调参数传递。
  2. Dunno,只是可变的一个奇怪的名字......你是对的,如果你的dataTypetext,结果将是一个普通的字符串。

    至于你没有创建变量,返回的数据(在本例中是一个字符串)是由jQuery创建的,只是作为回调的参数传递。

  3. 您似乎对“变量”和“函数参数”的概念感到困惑。我建议阅读更多关于“全局变量”和“变量范围”的内容。简而言之,reqform只能从内部这些函数中获得,其外部的代码将无法访问它们。 OTOH如果你在某个地方声明一个像var x这样的变量,同一范围内的每个代码都可以访问它(如果你在任何函数之外声明它,它将是全局的,所以你的所有代码都可以访问它)。 / p>

相关问题