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

Javascript 如何使用ajax传递变量参数名,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,尝试调用后端php脚本,该脚本读取和写入mysql数据库,并希望定义要从/动态读取或写入的字段(也称为列) 除了作为字段传递给javascript函数的动态参数名之外,所有内容都可以通过 如果我将字段硬编码为“mapstring”(与mysql数据库中的列名相匹配),则它可以工作。但是writeabledata.php被写入任何字段名,这取决于传入的内容 我必须对传递到writeabdata()中的字段字符串参数做些什么,以便在.ajax调用的数据部分正确传递它 function writeab

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

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

如果我将字段硬编码为“mapstring”(与mysql数据库中的列名相匹配),则它可以工作。但是writeabledata.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);
        }
    });
}
通常在写作时,你会希望使用“POST”类型而不是“GET”类型。POST用于将数据发布到数据存储,GET用于检索数据。但是,如果没有更多的代码,很难调试它,因此我将在黑暗中拍摄几张照片

首先,稍微整理一下代码,统一格式——像其他项目一样将“字段”放在引号中。虽然这可能无法解决您的问题,但实际定义为仅使用双引号

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

一旦你给我们更新了更多的信息,我就可以更新我的答案了——但我会先切换到POST

更新 我想我误解了这个问题——如果你想让data.field成为真正的data.somefield,比如属性名称中的字段可以更改为任何你想要的,这很简单:

数据[字段]=映射字符串

换言之:

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);
        }
    });
}
与您得到的一些注释相反,如上所述,您可以使用对象上的数组访问器动态设置属性名称。它工作得很顺利。构建静态命名的数据对象属性,然后通过数组访问器添加其他属性

通常在写作时,你会希望使用“POST”类型而不是“GET”类型。POST用于将数据发布到数据存储,GET用于检索数据。但是,如果没有更多的代码,很难调试它,因此我将在黑暗中拍摄几张照片

首先,稍微整理一下代码,统一格式——像其他项目一样将“字段”放在引号中。虽然这可能无法解决您的问题,但实际定义为仅使用双引号

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

一旦你给我们更新了更多的信息,我就可以更新我的答案了——但我会先切换到POST

更新 我想我误解了这个问题——如果你想让data.field成为真正的data.somefield,比如属性名称中的字段可以更改为任何你想要的,这很简单:

数据[字段]=映射字符串

换言之:

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);
        }
    });
}

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

不能使用变量设置对象文本的字段(当您在代码中直接使用
{}
时)

例如:

var field = "b";
var myObject = {
    "a": "A",
    field: "B",
};
该对象将如下所示:

{
    a: "A",
    field: "B",
}
var field = "b";
var myObject = {
    "a": "A",
};
myObject[field] = "B";
这不起作用的原因是字段始终被视为字符串。事实上,您不需要在字段名周围加引号,这只是语言糖分,可以让它看起来更好

要使用自定义字段创建对象,必须使用
[]
括号,如下所示:

{
    a: "A",
    field: "B",
}
var field = "b";
var myObject = {
    "a": "A",
};
myObject[field] = "B";
然后将按预期工作:

{
    a: "A",
    b: "B",
}

不能使用变量设置对象文字的字段(当您在代码中直接使用
{}
时)

例如:

var field = "b";
var myObject = {
    "a": "A",
    field: "B",
};
该对象将如下所示:

{
    a: "A",
    field: "B",
}
var field = "b";
var myObject = {
    "a": "A",
};
myObject[field] = "B";
这不起作用的原因是字段始终被视为字符串。事实上,您不需要在字段名周围加引号,这只是语言糖分,可以让它看起来更好

要使用自定义字段创建对象,必须使用
[]
括号,如下所示:

{
    a: "A",
    field: "B",
}
var field = "b";
var myObject = {
    "a": "A",
};
myObject[field] = "B";
然后将按预期工作:

{
    a: "A",
    b: "B",
}

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


另外,在函数中,将GET替换为POST

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


还将GET替换为POST

hint
type:“POST”
hint。您从不使用
字段
参数。。。为什么在那里?是吗?只要更改GET to POST,它就会工作?@SverriM.Olsen他使用它作为
mapstring
变量的
键。我确实使用了field参数。它被用作