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

为jQuery的getcitydetails函数添加CSRF令牌失败,求技术帮助

别担心,我来帮你把CSRF令牌正确加到你的AJAX请求里!先看看你修改版代码里的几个问题,然后给你一个能正常运行的版本。

你修改版里的主要问题:

  • 变量未定义:函数参数是a,但URL里用了id,这个id没有被定义,导致请求URL错误。
  • 对象语法错误:var b = { id = a }是错误的写法,对象字面量里应该用冒号:而不是等号=,正确的是{ id: a }。
  • data参数格式错误:data: b[id]='city_county_code'完全不符合AJAX数据的写法,这会导致请求参数传递错误。

修正后的完整代码:

function getcitydetails(selectedId) {
    // 1. 构造请求数据:包含业务参数和CSRF令牌
    var requestData = {
        city_county_code: selectedId // 这里的键名要和后端接口期望的参数名一致
    };
    // 把CSRF令牌添加到请求数据中(兼容所有JS环境)
    requestData[csrf_token_name] = $.cookie(csrf_cookie_name);

    // 2. 发送AJAX请求
    $.ajax({
        type: "POST",
        url: base_url + "fanok/ajax_city_list/" + selectedId, // 用函数参数selectedId,避免未定义错误
        data: requestData, // 直接传入构造好的参数对象
        success: function(data){
            $('#user_city').html(data);
        },
        error: function(xhr, status, error) {
            // 新增错误处理,方便调试请求失败的情况
            console.error("加载城市列表出错:", error);
        }
    });
}

如果你的项目支持ES6,也可以用更简洁的写法:

function getcitydetails(selectedId) {
    $.ajax({
        type: "POST",
        url: base_url + "fanok/ajax_city_list/" + selectedId,
        data: {
            city_county_code: selectedId,
            [csrf_token_name]: $.cookie(csrf_cookie_name) // ES6计算属性名,直接把令牌名作为键
        },
        success: function(data){
            $('#user_city').html(data);
        },
        error: function(xhr, status, error) {
            console.error("加载城市列表出错:", error);
        }
    });
}

额外注意事项:

  • 确保csrf_token_name和csrf_cookie_name是全局可用的变量(比如你的后端框架已经在页面中输出了这两个变量,比如CodeIgniter会自动生成)。
  • 确认你已经正确引入了jQuery Cookie插件,否则$.cookie方法会报错。
  • 后端接口需要能识别你传递的CSRF令牌参数,确保后端的CSRF配置和前端传递的参数名一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:03:06