Почему этот jJuery-вызов ajax к веб-методу C # не работает - PullRequest
0 голосов
/ 21 октября 2010

Вот мой 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 являются правильными. Я думаю, что с настройкой моей подписи веб-метода что-то не так, потому что Ajax никогда не запускается. При переходе по методу .ajax происходит ошибка, а не успех.

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Ваши веб-методы ожидают один параметр, объект данных, который у вас уже есть, но вы передаете несколько параметров, поскольку передаете объект напрямую.

Вместо этого вам необходимо иметь объект с одним свойством dataString и , значение которого свойства должно быть вашим объектом, например:

var dataString = JSON.stringify({ dataString: dataObj });
                                    ▲--should match--▼
public WebMethodResult declassify(DeclassifyType dataString)
1 голос
/ 21 октября 2010

Ах, я только что исправил это,

просто изменил подпись на

[WebMethod(EnableSession = true)]
public WebMethodResult declassify(int batchId, string[] docIds)
{
}

Просто на самом деле.Спасибо за проверку моего сообщения!

...