这是我的JS:
function declassifyAjax(e) {
var items = getSelected();
var docIds = new Array();
items.each(get);
//get ids of QcItem/docId we are dealing with
function get(count, el) {
docIds[count] = $(el).parent().attr('id');
}
var dataObj = new Object();
dataObj.batchId = batchId;
dataObj.docIds = docIds;
var dataString = JSON.stringify(dataObj)
//make call to webservice to get html to recreate view showing
//pending declassification
$.ajax({
type: "POST",
url: applicationRoot + 'Models/BatchQC.asmx/declassify',
data: dataString,
contentType: "application/json; charset=utf-8",
success: function (data) {
if (ProcessWebMethodResult.processWebMethodResult(data) == true) {
declassifyProcess(data, e);
}
},
error: function (e) {
alert("Failed to Get declassification details");
}
});
}
这是我的网络服务:
//type to represent the input the declassify method
public class DeclassifyType
{
public int batchId;
public string[] docIds;
}
[WebMethod(EnableSession = true)]
public WebMethodResult declassify(DeclassifyType dataString)
{
}
任何和所有帮助表示赞赏!
Firebug中的调试显示变量dataObj,batchId,docIds和dataString是正确的。我认为我的Web方法签名设置方式有问题,因为Ajax永远不会被解雇。当单步执行.ajax方法时,它会出错,而不是成功。
答案 0 :(得分:2)
您的Web方法需要一个参数,即您已拥有的数据对象,但是由于您直接传递了对象,因此您传递了多个参数。
相反,您需要一个具有一个属性dataString
和的对象,属性的值应该是您的对象,如下所示:
var dataString = JSON.stringify({ dataString: dataObj });
▲--should match--▼
public WebMethodResult declassify(DeclassifyType dataString)
答案 1 :(得分:1)
啊,我刚修好了,
刚刚将签名更改为
[WebMethod(EnableSession = true)]
public WebMethodResult declassify(int batchId, string[] docIds)
{
}
非常简单。感谢您查看我的帖子!