如何在jQuery中用同一数据执行两个不同action的AJAX请求
解决AJAX请求复用数据对象并设置不同Action的问题
问题出在你把action直接写在了$.ajax的配置项里——WordPress的AJAX机制要求action必须放在data对象中才会被后端识别,单独写在配置项里不会被传递到后端,所以才会失效。
要复用原request_data对象同时给两个请求设置不同的action,你需要复制原数据对象并为每个副本添加对应的action属性,这样既不会修改原对象,也能满足两个请求的不同需求。
修改后的完整代码
var request_data = { nonce: ajax_object.nonce, category_id: cat_ids, brand_name: brand_name_value, orderby_meta_key: orderby_meta_key, orderby: orderby, order_type: order_type, shop_view: shop_view } function ajax_filter(){ // 第一个AJAX请求:复制原数据并添加action $.ajax({ url: ajax_object.ajax_url, type: 'post', data: Object.assign({}, request_data, { action: 'shop_filter' }), success: function(feedback) { // 处理第一个请求的回调逻辑 } }) // 第二个AJAX请求:复制原数据并添加另一个action $.ajax({ url: ajax_object.ajax_url, type: 'post', cache: true, data: Object.assign({}, request_data, { action: 'update_another_function' }), success: function(feedback) { // 处理第二个请求的回调逻辑 } }) }
补充说明
Object.assign({}, request_data, { action: 'xxx' })会创建一个新对象,先复制request_data的所有属性,再添加/覆盖action属性,原request_data不会被修改,确保两个请求都能拿到原始的基础数据。- 你也可以用ES6扩展运算符替代
Object.assign,写法更简洁:{...request_data, action: 'shop_filter'},效果完全一致。
内容的提问来源于stack exchange,提问作者osama B.
相关产品推荐
相关产品推荐

