JQuery AJAX Загрузить в ASMX WebMethod с возвращаемыми значениями - PullRequest
0 голосов
/ 04 декабря 2018

Я изо всех сил пытаюсь заставить это работать.Если я включаю dataType: "json", я всегда получаю запрос на request.fail, но в консоли браузера на самом деле не отображаются ошибки.Если я удаляю dataType: "json", я не могу получить ответ возврата: получить ошибку в консоли: Uncaught TypeError: Невозможно прочитать свойство 'Guid' из неопределенного.

Все остальное работает отлично - файл загружается и записывается вбаза данных просто отлично.

JQuery:

$( document ).on( "change", "input[name='files']", function( e ) {

    var files = $( this ).prop( "files");
    var data = new FormData();

    var request;
    var result;
    var modal = $( this ).closest( ".modal" );
    var itemid = modal.data( "itemid" );

    for( var i = 0; i < files.length; i++ ) {

        data.append( "id", itemid );
        data.append( "file", files[i] );

        request = $.ajax( {

            type: "POST",
            url: "/webservices/webservices.asmx/UploadFile",
            data: data,
            // dataType: "json",
            contentType: false,
            processData: false

        } );

        request.done( function( response ) {

            result = response.d;
            console.log( result.Guid );

        } );

        request.fail( function( response ) {

            console.log( response.responseText );

        } );

        request.always( function() {

            data.delete( itemid );
            data.delete( files[i] );

        } );

    }

} );

WebMethod (упрощено для форумов):

public class Response
{

    public Guid Guid;
    public bool Toggle;
    public string Date;
    public string Text;
    public string Image;

}

[WebMethod]
public Response UploadFile()
{

    Response Response = new Response();

    Response.Guid = BasePage.NewGuid;
    Response.Text = "Hello, world!";
    Response.Image = "/images/test.png";
    return Response;

}

Консоль (request.done - no dataType):

Uncaught TypeError: Cannot read property 'Text' of undefined
    at Object.<anonymous> (eandf.js:218)
    at j (jquery-latest.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-latest.min.js:2)
    at x (jquery-latest.min.js:4)
    at XMLHttpRequest.b (jquery-latest.min.js:4)

Консоль (request.fail - с dataType: json):

<?xml version="1.0" encoding="utf-8"?>
<Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="<stripped out>">
    <Guid>53dc43ef-0fe5-4aaf-9866-06d23e3161d2</Guid>
    <Toggle>false</Toggle>
    <Text>Hello, world!</Text>
    <Image>/images/test.png</Image>
</Response>

1 Ответ

0 голосов
/ 04 декабря 2018

Попробуйте с этим кодом

 request = $.ajax( {

            type: "POST",
            url: "/webservices/webservices.asmx/UploadFile",
            data: data,
            dataType: "json",
            processData: false,
            cache:false

        } );

var response = JSON.parse(request.responseText);

//// Use above variable to get the response data

Дайте мне знать, если это поможет

...