我对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调用中的格式?
非常感谢
安德烈
答案 0 :(得分:0)
req
并将其作为回调参数传递。 Dunno,只是可变的一个奇怪的名字......你是对的,如果你的dataType
是text
,结果将是一个普通的字符串。
至于你没有创建变量,返回的数据(在本例中是一个字符串)是由jQuery创建的,只是作为回调的参数传递。
您似乎对“变量”和“函数参数”的概念感到困惑。我建议阅读更多关于“全局变量”和“变量范围”的内容。简而言之,req
和form
只能从内部这些函数中获得,其外部的代码将无法访问它们。 OTOH如果你在某个地方声明一个像var x
这样的变量,同一范围内的每个代码都可以访问它(如果你在任何函数之外声明它,它将是全局的,所以你的所有代码都可以访问它)。 / p>