这里我从asp.net页面进行了一个简单的ajax post调用,显示了httpfox上的以下错误。"加载内容时出错(NS_Error_DOCUMENT_NOT_CACHED)"和
error: function () { alert(arguments[2]); }
的ajax调用显示警报消息为"内部服务器错误"
在这里,我创建了一个JSON数组,并将该JSON数组转换为JSON字符串,并将其作为参数传递给服务器端方法。
这是我的ajax调用
$('#btnResult').on('click', function () {
var myObject = new Object();
$("#<%=GridProjectDetails.ClientID %> tr").each(function () {
var id = $(this).find("input[name*='ID']").val();
var locationcode = $(this).find("input[name*='TextLocationCode']").val();
var Location = $(this).find("input[name*='TextLocation']").val();
myObject.id = id;
myObject.locationcode = locationcode;
myObject.Location = Location;
});
var myString = JSON.stringify(myObject);
alert(myString);
var exportdata = myString;
$.ajax({
type: "POST",
url: "Default.aspx/ExportToExcel",
data: exportdata,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#Result").text(data.d);
},
error: function () { alert(arguments[2]); }
});
});
});
这是我的服务器端代码
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string ExportToExcel(string details)
{
return "Message : Success";
}
有什么想法吗?这里发生了什么?
试试这个:
$('#btnResult').on('click', function () {
var myArray = [];
$("#<%=GridProjectDetails.ClientID %> tr").each(function () {
var id = $(this).find("input[name*='ID']").val();
var locationcode = $(this).find("input[name*='TextLocationCode']").val();
var Location = $(this).find("input[name*='TextLocation']").val();
var myObject = new Object();
myObject.id = id;
myObject.locationcode = locationcode;
myObject.Location = Location;
myArray.push(myObject);
});
var myString = JSON.stringify({details: JSON.stringify(myArray)});
alert(myString);
var exportdata = myString;
$.ajax({
type: "POST",
url: "Default.aspx/ExportToExcel",
data: exportdata,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#Result").text(data.d);
},
error: function () { alert(arguments[2]); }
});
});
});
感谢您的回复。
今天我在谷歌上搜索了1个多小时后得到了答案
我学到的是,在使用string()方法发送json数据时,在服务器端我们需要将参数定义为对象。而不是任何其他格式,如string/int/bla-bla。。。。。
实际上,我的服务器端参数有一个错误。我把它从字符串修改为对象,它对我有效。在这里我定义了我修改后的答案。
$('#btnResult').on('click', function () {
var mydata = [];
$("#<%=GridProjectDetails.ClientID %> tr").each(function () {
var myObject = new Object();
var id = $(this).find("input[name*='ID']").val();
var locationcode = $(this).find("input[name*='TextLocationCode']").val();
var Location = $(this).find("input[name*='TextLocation']").val();
myObject.id = id;
myObject.locationcode = locationcode;
myObject.Location = Location;
mydata.push(myObject);
});
var myString = JSON.stringify({ details: JSON.stringify(mydata) });
alert(myString);
var exportdata = myString;
$.ajax({
type: "POST",
url: "Default.aspx/ExportToExcel",
data: exportdata,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#Result").text(data.d);
},
error: function () { alert(arguments[2]); }
});
});
});
我的服务器端方法应该是
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string ExportToExcel(object details)
{
return "Message : Success";
}
使用以下方法发送数据
data: "{'details':" + myString "}",