为什么这个jQuery ajax调用C#web方法不起作用

时间:2010-10-21 09:52:59

标签: c# javascript jquery ajax asmx

这是我的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方法时,它会出错,而不是成功。

2 个答案:

答案 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)
{
}

非常简单。感谢您查看我的帖子!