[英]how to pass a variable parameter name using ajax
嘗試調用后端php腳本,該腳本讀取和寫入mysql數據庫,並希望定義我要動態讀取/寫入的字段(aka列)。
除了動態參數名稱(我將其作為字段傳遞給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);
}
});
}
通常,在編寫時,您將要使用“ POST”類型而不是“ GET”類型。 POST用於將數據發布到數據存儲中,而GET用於檢索數據。 但是,如果沒有更多的代碼,很難調試它,所以我將在黑暗中拍攝幾張照片。
首先,稍微清理一下代碼並統一格式-將“字段”像其他項目一樣放在引號中。 雖然這可能無法解決您的問題,但JSON標准實際上定義為僅使用DOUBLE QUOTES。
其次,如果我們可以看到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",
b: "B",
}
在此函數中,您要接受4個參數-表,id,字段,mapstring ..,然后使field:mapstring ..即要使字段值等於mapstring而不是Submit。為什么要接受兩個參數在一個將一個人的值分配給另一個函數的函數中...可能就是您只想將字段作為table字段的1。所以采用3個參數-table,id,field ..並類似地分配field的值,您分配了值表和ID的數據,看看是否可行...
同時將GET替換為POST
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.