如何使用ajax传递变量参数名称

时间:2015-08-08 21:45:52

标签: javascript php jquery mysql ajax

尝试调用后端php脚本,该脚本读取和写入mysql数据库,并希望定义我想要动态读取或写入的字段(也就是列)。

除了我作为字段传递给javascript函数的动态参数名称之外,所有内容都会通过。

如果我将字段硬编码为'mapstring'(与mysql数据库中的列名匹配),那么它可以工作。但写入writeabdata.php是为了写入任何字段名称,具体取决于传入的内容。

我需要对传入writeabdata()的字段字符串参数做什么,以便在.ajax调用的数据部分正确传递?

function writeabdata(table, id, field, mapstring) {
    //alert ("table = "+table+" id = "+id+" field = \'"+field+"\' value = "+value);
    $.ajax({
        type: 'GET',
        url: 'writeabdata.php',
        data: {
            'table': table,
            'id': id,
            field: mapstring
        },
        success: function (data) {
            alert ("data Saved "+ data);
        }
    });
}

3 个答案:

答案 0 :(得分:4)

通常在时,您会想要使用" POST"类型而不是" GET"类型。 POST用于将数据POSTING到数据存储,而GET用于RETRIEVING它。但是,如果没有更多的代码,它很难调试,所以我会在黑暗中拍摄几张照片。

首先,清理代码并统一格式 - put" field"在引号中像你的其他项目。虽然这可能无法解决您的问题,但JSON standard实际上只定义为使用DOUBLE QUOTES。

其次,如果我们能够看到PHP代码,那会有所帮助 - 我的猜测是,如何解释响应有问题。我建议您出于调试目的,让Fiddler运行并检查实际请求,以确保您将所有必需字段发送到服务器。

一旦您通过更多信息更新我们,我可以更新我的答案 - 但我会从切换到POST开始。

<强>更新 我想我误解了这个问题 - 如果你想让data.field真正成为data.somefield,因为该属性的名称可以改为你想要的任何东西,这很简单:

data [field] = mapstring

换句话说:

function writeabdata(table, id, field, mapstring) {
    //alert ("table = "+table+" id = "+id+" field = \'"+field+"\' value = "+value);

    var dataObj = {
        'table': table,
        'id': id
    };
    dataObj[field] = mapstring;

    $.ajax({
        type: 'GET',
        url: 'writeabdata.php',
        data: dataObj,
        success: function (data) {
            alert ("data Saved "+ data);
        }
    });
}

与您收到的一些评论相反,如上所述,您可以使用对象上的数组访问器动态设置属性名称。它运作得很好。构建静态命名的数据对象属性,然后通过数组访问器添加其他属性。

答案 1 :(得分:1)

您无法使用变量设置对象文字的字段(当您在代码中直接使用chrome.dll!extensions::api::developer_private::LoadDirectory()时)。

例如:

{}

该对象将如下所示:

var field = "b";
var myObject = {
    "a": "A",
    field: "B",
};

这不起作用的原因是因为字段始终被视为字符串。事实上,你不需要在字段名称周围加上引号,这只是语言糖,使它看起来更好。

为了使用自定义字段创建对象,您必须使用{ a: "A", field: "B", } 括号,如下所示:

[]

然后按预期工作:

var field = "b";
var myObject = {
    "a": "A",
};
myObject[field] = "B";

答案 2 :(得分:0)

在你的函数中你需要4个参数 - table,id,field,mapstring ..然后创建字段:mapstring .. 即你希望字段值等于mapstring而不是submit ..为什么你想在函数中取两个参数来将一个值赋给另一个...可能你只想将字段作为表的字段中的1 ..所以取3个参数 - table,id,field ..并分配字段的值,类似于你分配了table和id的值,看它是否有效......

也用POST取代GET