You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery的success回调函数中获取请求的最新URL

你之前使用this.url失效的核心原因是this指向ajax配置对象,如果你复用同一个配置对象发送多个请求、或者后续修改了配置对象的url属性,回调触发时读取的就是修改后的最新值,而非本次请求的实际URL。

直接获取方案

jQuery 3.0及以上版本可以直接在success回调内通过第三个入参jqXHR对象获取本次请求的最终URL,对应属性为jqXHR.url,该属性记录的是请求发送时的实际完整地址,不受后续页面URL变动、其他请求修改配置的影响,示例如下:

$.ajax({
  url: '/your/request/path',
  success: function(data, statusText, jqXHR) {
    // 直接获取本次请求的URL
    const currentRequestUrl = jqXHR.url;
    console.log(currentRequestUrl);
  }
})

低版本jQuery兼容方案

如果使用的jQuery版本低于3.0,无法通过jqXHR.url直接获取,可以用以下两种稳定方案:

  • 闭包捕获请求URL
    发送请求前将本次请求的URL存入局部变量,利用闭包特性保留变量快照,不受后续变量修改影响:
    // 定义本次请求的URL,后续即便修改该变量也不会影响回调内的取值
    const targetUrl = '/your/request/path?param=test';
    $.ajax({
      url: targetUrl,
      success: function(data, statusText, jqXHR) {
        console.log(targetUrl);
      }
    })
    
  • 显式挂载URL到请求配置对象
    把本次请求的URL作为自定义属性挂载到ajax配置对象上,回调内通过this访问自定义属性,避免复用配置对象时this.url被修改的问题:
    $.ajax({
      url: '/your/request/path',
      // 自定义属性存储当前请求URL
      requestUrl: '/your/request/path',
      success: function(data, statusText, jqXHR) {
        console.log(this.requestUrl);
      }
    })
    

如果success回调是单独定义的外部函数,可以通过bind方法绑定URL参数:

function requestSuccessHandler(data, statusText, jqXHR) {
  console.log(this.bindUrl);
}

const currentUrl = '/your/request/path';
$.ajax({
  url: currentUrl,
  success: requestSuccessHandler.bind({bindUrl: currentUrl})
})

内容的提问来源于stack exchange,提问作者Jomity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:15:03