尝试调用后端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);
}
});
}
答案 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