为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
相关产品推荐
相关产品推荐

