Вызвать веб-метод с AJAX и возвращать в формате JSON
Я вызываю webmethod со своей страницы aspx с помощью ajax-вызова. Этот веб-метод загружает файлы, и мне нужно, чтобы возвращаемый объект имел тип Object. Теперь, как показано ниже, процесс работает и успешно загружает файлы, но мой gridView не может быть заполнен, потому что возвращаемый ответ имеет тип XMLDocument:
var fileUpload = $("#FileUpload1").get(0); var files = fileUpload.files; var fileData = new FormData(); fileData.append(files[0].name, files[0]); fileData.append('username', 'Test'); $.ajax({ url: 'MyWebservice.asmx/UploadFiles', type: "POST", contentType: false, processData: false, data: fileData, success: function (response) { alert (response); // response is [object XMLDocument] var gridView = $find('<%= grdvUploadFiles.ClientID %>'); gridView.set_dataSource(response); // gridView could not be filled and the process stops here gridView.dataBind(); } });
На других страницах aspx я вызываю свой веб-сервис и успешно заполняю gridViews, потому что возвращаемый ответ имеет тип Object. Ниже приведен пример:
MyWebservice.MyWebMethod("test",LunchMyFunction); function LunchMyFunction(response) { alert(response); // [object Object] var gridView = $find('<%= MyGridView.ClientID %>'); gridView.set_dataSource(response); gridView.dataBind(); }
Теперь я нашел решение с помощью Json:
$.ajax({ type: "POST", url: 'AutoComplete.asmx/UploadFiles', data: JSON.stringify(fileData), contentType: "application/json; charset=utf-8", processData: false, dataType: "json", success: function (response) { alert(response); // [object Object] .... });
Теперь возвращаемый ответ имеет тип Object (что идеально), но мой webmethod не смог поймать отправленный файл, другими словами: Я изменил не свой webmethod , а счетчик файлов :
HttpContext.Current.Request.Files.Countравно 0, в то время как в старом методе ajax (первый упомянутый выше) счетчик запросов возвращает 1 , и файл успешно загружен. В чем моя проблема? Как я могу правильно отправить свой файл и вернуть объект?
Что я уже пробовал:
Я попытался также добавить
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)>но когда я хочу позвонить из ajax, возникает "внутренняя ошибка сервера".