我已经尝试了几个小时,无法弄清楚我做错了什么,我确定它缺少一些简单的东西,但任何帮助都会很棒。
我创建了一个动态填充的对象,这完美地工作,当 im 尝试通过 ajax 将数据发送到 php 进程页面时出现问题。
下面的代码是我为对象获取键和值的循环。
//build up dynamic datastring for ajax
var dataString = ""
dataString += "{";
jQuery.each(obj,function(key, value) {
dataString += "'"+key+"':'"+value+"',";
});
//remove last , then add the containing bracket
dataString = dataString.slice(0,-1);
dataString += "};";
console.log(dataString);
//do ajax
jQuery.ajax({
url:'/builder/process-form.php',
type:'POST',
data:dataString
}).done(function(data){
console.log(data);
});
});
我已经将 dataString var 写入控制台,这是输出{'type':'tickbox','fname':'Empty','value':'Empty','req':'Yes','valType':''};对于数据参数来说,这看起来结构正确?
在 php 页面上,我遍历所有帖子数据,这显示注意,如果我复制 {'type':'tickbox','fname':'Empty','value':'Empty','req':'Yes','valType':''}; 在数据之后:行,那么这有效吗?
任何帮助将不胜感激
非常感谢
伊恩
也许我在你的过程中错过了一些东西,但你不需要构建一个看起来像对象的"数据字符串",只需发送对象:
//do ajax
jQuery.ajax({
url:'/builder/process-form.php',
type:'POST',
data:obj
}).done(function(data){
console.log(data);
});
然后你在 PHP 端得到 $_POST 的对象属性。
对于数据参数来说,这看起来结构正确?
不。您正在将源代码构建为 JavaScript 对象文本。您需要一个普通的 JavaScript 对象来表示data
参数。
摆脱dataString
和与之相关的一切。
data: obj
如果您确实想以这样的格式发送数据(而不是作为标准形式的编码数据),请使用 JSON(与您生成的几乎相同,但引用规则更严格),并且可以使用标准函数生成:
var datastring = JSON.stringify(obj);
但是,如果这样做,则必须在请求标头中指定它:
data: datastring,
contentType: "application/json",
并在 PHP 方面以不同的方式处理它。