我一直试图让这项工作时间过长,并认为我可能会在这里寻求帮助。我试图将javascript对象传递给服务器端,然后返回到客户端。有点像,在每次回发时我想根据某些条件更新后面或客户端的目标代码的值。我可以在这里使用hiddenfield,但我正在尝试学习ajax。 我已经声明了一个名为sortList的全局变量客户端,它存储有关哪个任务存储在哪个槽中的信息。就像它一样:
var sortList = {};
sortList[tid] = sid;
接下来我写了一个网络方法:
[WebMethod]
public static string storeList(DragList dict)
{
DragList dl = dict;
int i = 0;
return "success";
}
public class DragList
{
public string taskName { get; set; }
public string slotName { get; set; }
}
在客户端我用它来调用它:
console.log(JSON.stringify(sortList));
$.ajax({
type: "POST",
url: "Jobs.aspx/storeList",
data: JSON.stringify({dict: sortList}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
}});
}
我的问题是在web方法中,DragList对象dict总是为null,但在请求中,dict是一个带有值的json对象。
我现在已经被困在了太长时间,并且几乎计划进入隐藏领域以完成任务。但如果有人能指出我正确的方向,我真的很感激。
我做出的改变: 我使用tid作为在对象数组中找到sid的键,所以如果我把它分成几部分,我将失去键值配对。相反,我以适当的JSON格式创建了一个新字符串:
jsonStr = "{";
var w = 0;
for (var key in sortList) {
var obj = sortList[key];
jsonStr += '"key":{"taskName":"' + key + '", "slotName":"' + obj + '"},';
w++;
}
jsonStr = jsonStr.substring(0, jsonStr.length - 1);
jsonStr += '}';
console.log(jsonStr);
$.ajax({
type: "POST",
url: "Jobs.aspx/storeList",
data: {dict: jsonStr},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
}});
}
但是现在,我收到以下错误:
答案 0 :(得分:1)
你的Json错了:
您将其发送为
{"taskName:mainContent_ptask5":"alotName:mainContent_palot0"}
而不是
{"taskName":"mainContent_ptask5", "alotName":"mainContent_palot0"}
前者将属性名称视为taskName:mainContent_ptask5
,因此无法取消判断您的参数名称taskName
或slotName
罪魁祸首必须是:
var sortList = {};
sortList[tid] = sid; // here i guess tid is "taskName:mainContent_ptask5" and sid is "alotName:mainContent_palot0"
而是尝试这样的事情:
var tidParts = tid.split(':');
var sidParts = sid.split(':');
var sortList = {
};
sortList[tidParts[0]] = tidParts[1];
sortList[sidParts[0]] = sidParts[1];