H.AL Ответов: 1

Вызвать веб-метод с 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, возникает "внутренняя ошибка сервера".

1 Ответов

Рейтинг:
0

Ashwin. Shetty

Проверьте тип контента для обоих запросов, и вы получите свой ответ.

contentType: "application/json; charset=utf-8",
Сервер выглядит для типа контента и в переработан способ его будем отмечать как JSON-объект.

Спасибо,
Эшвин Шетти


H.AL

Я не понял, что вы имеете в виду, не могли бы вы привести мне пример, пожалуйста?

Ashwin. Shetty

Когда вы делаете вызов из ajax (в браузере), вы устанавливаете тип контента в application/json, но на сервере вы ожидаете файл. Для загрузки файла тип контента должен быть установлен в multipart/form-data.

H.AL

И как я могу получить возвращаемые данные в виде Json? Если я добавить значение contentType: "multipart/данные формы", и элемент DataType: "JSON с" и сведения: данные filedata ошибку, "ОК" возвращается . Что здесь происходит?

Ashwin. Shetty

В случае ошибки вы можете вернуть код ошибки http 500. Попробуйте установить тип контента при ответе с сервера