使用jQuery $.getJSON向PHP $_GET传递多对象参数的解析问题
解决JavaScript通过$.getJSON传递对象到PHP $_GET的参数解析问题
你当前的问题根源在于:直接将JSON字符串截取首尾大括号后拼接URL,不符合URL查询参数key=value的标准格式,导致PHP把整段字符串当成了一个参数键,值为空,从而出现异常的$_GET结构。
以下是两种可行的解决方法:
方法一:使用jQuery内置的$.param()方法(推荐)
利用$.param()可以自动将对象转换为标准的URL查询参数格式,同时支持多对象合并:
my_obj1={property1:"value1",property2:"value2",propery3:"value3"}; my_obj2={property4: "value4", property5: "value5", propery6: "value6"}; // 合并基础参数与两个对象的所有键值对 const allParams = $.extend({}, {q: "valuezero"}, my_obj1, my_obj2); // 转换为URL查询参数字符串 const onestr = "?" + $.param(allParams); $.getJSON(onestr, function() { console.log("Be here now"); })
生成的URL会是标准格式:?q=valuezero&property1=value1&property2=value2&propery3=value3&property4=value4&property5=value5&propery6=value6,PHP的$_GET将直接解析出所有预期的键值对。
方法二:手动遍历对象生成参数(无依赖场景)
如果不想用jQuery的工具方法,可以手动遍历对象键值对,拼接成标准参数:
// 工具函数:将对象转为URL查询参数字符串 function objToQuery(obj) { return Object.keys(obj).map(key => { return `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`; }).join("&"); } my_obj1={property1:"value1",property2:"value2",propery3:"value3"}; my_obj2={property4: "value4", property5: "value5", propery6: "value6"}; // 合并所有参数 const allParams = {...{q: "valuezero"}, ...my_obj1, ...my_obj2}; const queryStr = objToQuery(allParams); const onestr = "?" + queryStr; $.getJSON(onestr, function() { console.log("Be here now"); })
额外说明
URL查询参数不需要JSON格式的双引号,必须严格遵循key=value的结构,PHP的$_GET只会解析这种格式的参数。之前的错误做法相当于把一段非标准字符串直接塞进了URL参数里,自然无法被正确解析。
内容的提问来源于stack exchange,提问作者cory s. shearwater
相关产品推荐
相关产品推荐

