如何在加载该页面之前使用 javascript 附加请求的标头

Posted

技术标签:

【中文标题】如何在加载该页面之前使用 javascript 附加请求的标头【英文标题】:How to use javascript to append the header of request before loading that page 【发布时间】:2018-12-08 05:09:06 【问题描述】:

我有 2 个 html 文件属于两个不同的控制器

这属于 SignupController 的 Index 动作

索引.html

<div class="signup-small-font pull-right"><a href="/Account/ResetPassword">Forgot password?</a></div>

当点击这个链接时,它会转到那个url并请求获取AccountController的ResetPassword Action的视图并获取resetPAssword.html

现在我想要的是在发出该请求之前,我需要在服务器端的请求中附加一个自定义标头。 我使用的是 ajax javascript

function appendHeader(urlCulture)

$.ajax(
    type: 'GET',
    url: urlCulture,
    headers: 
        "Culture": 'zh'
    ,

)

在请求 resetPassword.html 之前,我应该在 index.html 锚链接中调用这个函数吗

就像我想要的一样,当我点击它时,它将导航到 Account/Resetpassword 并使用从 javascript 文件中获取的响应来呈现而不是正常响应

【问题讨论】:

【参考方案1】:

你正在使用路由,你需要从javascript函数中获取url

这里有一个例子: Get local href value from anchor (a) tag

你可以做类似的东西:

<div class="signup-small-font pull-right"><a onclick="return appendCustomHeader(this);" href="/Account/ResetPassword">Forgot password?</a></div>

在你的 js 函数中,就像之前的回复一样,你可以做这样的事情:

function appendCustomHeader(element)

    var url = element.href; // to get full url 

    $.ajax(
        type: 'GET',
        url: url, 
        headers: 
            "CustomHeader": 'YourCustomHeader'
        ,
        success: function(res) 
            // here you make anything else with your response
        
    )

   return false;

我没有测试过,希望对你有用。

看来你可以禁用返回 false 的 href 重定向,

看到这个:

How can I disable HREF if onclick is executed?

【讨论】:

您好,这种方法还会发送两次请求,一次带有标头,一次没有标头 然后“href”工作,即没有标头的请求。尝试使用不同的属性名称而不是“href”,我已经编辑了答案。请看。 如果我更改为 route ,它不再导航到该页面。就像我想要的是当我点击它时,它将导航到 Account/Resetpassword 并使用从 javascript 文件中获取的响应来呈现而不是正常响应 我已经编辑过了。返回 false 禁用 href 重定向,试试吧。 设置 return false 不会导航到该页面,即使我仍然得到正确的响应。这不是我想要的。所以我的想法是我需要导航到该页面,但它会使用从 javascript 文件中获得的响应来呈现页面【参考方案2】:

在你的 html 文件中

<div class="signup-small-font pull-right"><a onclick="appendHeader(urlCulture)" href="#">Forgot password?</a></div>

在你的 js 中

function appendHeader(urlCulture)
    $.ajax(
        type: 'GET',
        url: urlCulture,
        headers: 
            "Culture": 'zh'
        ,
        success: function(res) 
            window.location = 'Account/ResetPassword';
        

    )

试一试。我不太确定这是否是您想要做的。

【讨论】:

它说'window.location 不是一个函数' 应该是window.location = "Account/ResetPassword"; 我已经更改到正确的位置,但现在的问题是 AccountController 被调用了两次,一次使用自定义标头,然后调用一次没有它 你把href的值改成“#”了吗? 是的,我已经这样做了,但似乎通过将 window.location 设置为 Account/ResetPassword 成功,使其再次触发帐户控制器中的操作

以上是关于如何在加载该页面之前使用 javascript 附加请求的标头的主要内容,如果未能解决你的问题,请参考以下文章

Selenium:如何在加载/执行页面的任何其他脚本之前将 Javascript 注入/执行到页面中?

如何在页面加载之前运行 JavaScript 代码?

Javascript/JQuery 直到页面重新加载后才工作

JavaScript使用纯JS实现多张图片的懒加载Lazy(附源码)

Laravel 5.4 - 如何在 javascript 加载之前使 @section 屈服

使用flutter_webview_plugin加载页面后如何在WebView中执行JavaScript代码