格式化动态构建的参数字符串以在数据中传递jquery ajax

时间:2012-09-11 08:38:20

标签: jquery ajax post

我想通过ajax将动态构建的表单中的数据传递给php脚本,但是却无法找到参数字符串格式的正确语法。 有一些固定参数,有些是动态添加的,后者的键和值可能会发生变化。

我尝试将参数列表构建为字符串的串联,如下所示:

...
var dataVars = '{fctSelect: 2, strat: strat, ' + gbl.dataVariables + '}';

...

$j.ajax({
    url: "ajax/script.php",
    type: "POST",
    data: dataVars,
...

gbl.dataVariables的格式如下:'field1:value1,field2:value2,field3,value3'

在console.log中进入数据的结果字符串“看起来正确”,但是在字段验证后,在控制台的post选项卡中,它显示如下:

{fctSelect: 2, strat: strat, ...

而不是:

fctSelect: 2
strat: 1
...

表示不解析参数。有人可以指点我哪里出错了吗?

2 个答案:

答案 0 :(得分:3)

我建议你采用替代方法而不是字符串连接:

var dataVars = {};

// add some static values
dataVars['fctSelect'] = 2;
dataVars['strat'] = 'some value';

// now add some dynamic values
for (var i = 0; i < 10; i++) {
    dataVars['field' + i] = i;
}

// send the data as a JSON encoded request
$j.ajax({
    url: 'ajax/script.php',
    type: 'POST',
    data: JSON.stringify(dataVars),
    contentType: 'application/json',
...

然后在script.php

$data = json_decode(file_get_contents("php://input"));

答案 1 :(得分:1)

达林迪米特洛夫的解决方案可能是您的选择,我只会给您一个替代方案。如果您通过serialize()收集表单的字段及其值,则只需添加如下静态数据:

var dataVars = $('form').serialize(),
    dataVars += dataVars.length > 0 && '&'; // in case there are no form fields
    dataVars += 'fctSelect=2&strat=somevalue';

$j.ajax({
    url: 'ajax/script.php',
    type: 'POST',
    data: dataVars,
    success: function() {}
});