【发布时间】:2014-02-27 04:58:41
【问题描述】:
我得到了 AJAX 发送/接收周期来发送字符串代码和接收复杂的 Json 对象,然后我可以用它做很多事情。在将更复杂的数据发送回服务器方面,我已经阅读了很多关于这个主题的帖子,但无法弄清楚如何实现这一点。
所以我建立了以下,希望得到一些反馈。在以前的版本中,我可以将复杂对象推送到控制器,但在 C# 中没有足够的结构来使用它。所以我转移了一个固定的结构(一个命令代码加上一个键值对数组)。但是,在这个版本中,它在 ajax 发送上失败了。
JavaScript
//=============================
KeyValueObject = new function () {
this.key
this.value
}
//=============================
AjaxSendObject = new function () {
this.code
this.data
}
/
/=============================
function JSTest() {
wrkData = BuildAjaxSendKV()
AJAX_Client_Sender("datasendtest",wrkData)
}
//=============================
function BuildAjaxSendKV() { // build an array of key value objects
wrkAR = []
wrkKV = KeyValueObject
wrkKV.key = "name"
wrkKV.value = "XYZ"
wrkAR.push(wrkKV)
wrkKV = KeyValueObject
wrkKV.key = "title"
wrkKV.value = "ABC"
wrkAR.push(wrkKV)
return wrkAR
}
//=============================
function AJAX_Client_Sender(ajaxRequestType,varSendKV) {
$.ajaxSetup({ cache: false });
var wrkjson = varSendKV
var wrkData = CreateJsonSendData(ajaxRequestType, varSendKV)
a=1
$.ajax({ // fails here, doesn't like the data
type:"POST",
url: "/Main/AJAX_Router",
data: {receiver:wrkData},
datatype: 'json',
success: function (msg) {
if (msg.indexOf("ok") == -1) {
var json = $.parseJSON(msg)
wrkjson = json
}
//var a = json["1"].MainText
AjaxClientRouter(ajaxRequestType, wrkjson)
},
error: function (request, status, error) {
alert(request.responseText);
}
})
}
//=============================
function CreateAJAXSendData(ajaxRequestType, varSendKV)
{
var wrkSend = AjaxSendObject
wrkSend.code = ajaxRequestType
wrkSend.data = varSendKV
return wrkSend
}
C#
//=============================
public class AJAXReceiverWrapper
{
public AJAXReceiver receiver { get; set; }
}
//=============================
public class AJAXReceiver
{
public string code { get; set; }
public string[] ar { get; set; }
}
//=============================
public class MainController : Controller
{
//
public class MainController : Controller
{
public ActionResult AJAX_Router(AJAXReceiverWrapper varReceiverWrapper)
{
string code = "";
string wrkObj = "";
try
{
AJAXReceiver wrkReceiver = varReceiverWrapper.receiver;
code = wrkReceiver.code;
}
catch (Exception e)
{
string errmsg = e.Message;
}
// do more stuff
【问题讨论】:
-
你能不能为你的 wrkData 做一个 console.log,看看是否生成了一个有效的 JSON。
-
@PrerakK,thnx 会在上午尝试
-
啊,我看应该是'data:({receiver:wrkData})',即需要括号
-
看起来像是一个简单的错字,应该是
data: {jsonString: wrkDataString }(冒号,而不是逗号) -
@Phil,谢谢,它是有效的 json; AJAX 发送中的错误实际上是在成功函数中;剩下的问题出在接收 C# 代码中,我不明白如何解析传入的数据。我最初发布的 C# 代码是如此混乱,我认为要求人们继续查看它没有任何意义。
标签: jquery ajax asp.net-mvc