0

我正在研究使用 JQuery 的 Spring MVC Showcase,但我对 JQuery 世界还是很陌生

我对研究这个例子的 JQuery 函数的行为有些怀疑。

所以,我有以下链接生成一个指向“/mapping/produces”文件夹的 HTTP 请求

        <li>
            <a id="byProducesAcceptJson" class="writeJsonLink" href="<c:url value="/mapping/produces" />">By produces via Accept=application/json</a>
        </li>

如您所见,此链接具有名为“writeJsonLink”的类,并且对于该类,定义了单击链接时触发的以下 JQuery 函数:

$("a.writeJsonLink").click(function() {
    var link = $(this); // Variable that contain the referer to the clicked link 

    // Execute ajax call
    $.ajax({ url: this.href,    

        // Before send the request to the server execute the following function
        beforeSend: function(req) {
            if (!this.url.match(/\.json$/)) {
                req.setRequestHeader("Accept", "application/json");
            }
        },
        success: function(json) {
            MvcUtil.showSuccessResponse(JSON.stringify(json), link);
        },
        error: function(xhr) {
            MvcUtil.showErrorResponse(xhr.responseText, link);
        }});
    return false;
});

我的问题是我在理解 if 条件的含义时遇到了一些问题,这部分代码是什么意思?

            if (!this.url.match(/\.json$/)) {
                req.setRequestHeader("Accept", "application/json");
            }

看到在我看来只向 HTTP 请求添加了一个标头......但我认为实际上用 JSON 做一些事情......我也有一些问题来理解 if 逻辑条件的含义......

非常感谢安德里亚

4

1 回答 1

1

简而言之,代码检查端点 URL 是否以 结尾.json,如果是,则添加Accept: application/json标头。

        if (!this.url.match(/\.json$/)) {
            req.setRequestHeader("Accept", "application/json");
        }

这个.url

从当前 xHR 对象中获取 URL

匹配

match() 方法在字符串中搜索与正则表达式的匹配项,并将匹配项作为 Array 对象返回。

/.json$/

是一个简单的正则表达式,用于检查 URL 是否以.json

req.setRequestHeader("接受", "应用程序/json");

Req 再次是扩展的 xHR 对象,而 setRequestHeader()用于设置请求的标头。在请求的 Accept 标头中设置 accplication/json。就像是Accept: application/json

于 2012-11-20T23:46:09.477 回答