0

我已经尝试了好几个小时,但无法弄清楚我做错了什么,我确信这是我缺少的一些简单的东西,但任何帮助都会很棒。

我创建了一个动态填充的对象,当我尝试通过 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':''}; 在 data: 行之后,这行得通吗?

任何帮助将不胜感激

非常感谢

伊恩

4

2 回答 2

1

这看起来适合数据参数的结构?

不,您正在构建 JavaScript 对象字面量的源代码。您需要一个普通的 JavaScript 对象作为data参数。

摆脱dataString和与之相关的一切。

data: obj

如果您确实想以这样的格式发送数据(而不是作为标准格式编码数据),请使用 JSON(这与您生成的几乎相同,但引用规则更严格)并且可以使用标准函数生成:

var datastring = JSON.stringify(obj);

但是,如果您这样做,则必须在请求标头中指定它:

data: datastring,
contentType: "application/json",

在 PHP 端以不同方式处理它

于 2013-10-27T09:08:22.207 回答
1

也许我在你的过程中错过了一些东西,但你不需要构建一个看起来像对象的“数据字符串”,只需发送对象:

  //do ajax
  jQuery.ajax({
       url:'/builder/process-form.php',
       type:'POST',
       data:obj
  }).done(function(data){
   console.log(data);
 });

然后在 PHP 端使用 $_POST 获取对象属性。

于 2013-10-27T09:08:52.773 回答