【问题标题】:jQuery AJAX Upload to ASMX WebMethod with return valuesjQuery AJAX 上传到带有返回值的 ASMX WebMethod
【发布时间】:2018-12-04 11:44:58
【问题描述】:

我正在努力让它发挥作用。如果我包含 dataType: "json" 我总是被抛出 request.fail 但浏览器控制台中实际上没有显示任何错误。如果我删除 dataType: "json" 我无法获得返回响应:在控制台中出现错误:Uncaught TypeError: Cannot read property 'Guid' of undefined。

其他一切都运行良好 - 文件上传并写入数据库就好了。

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 - 无数据类型):

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 - 数据类型: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>

【问题讨论】:

    标签: javascript jquery asmx webmethod


    【解决方案1】:

    试试这个代码

     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
    

    如果有帮助请告诉我

    【讨论】:

    • 未捕获的语法错误:在 HTMLInputElement 的 JSON.parse () 的位置 0 处的 JSON 中的意外标记 u。HTMLDocument.dispatch 的 (eandf.js:215) (jquery-latest. min.js:3) 在 HTMLDocument.r.handle (jquery-latest.min.js:3) (匿名) @ eandf.js:215 dispatch @ jquery-latest.min.js:3 r.handle @ jquery-latest .min.js:3
    • 无论我做什么,当我在请求中使用带有 processData: false 的 FormData 时,响应始终是 XML。即使我将 WebMethod 更改为返回一个简单的字符串而不使用 Response。因此,如果我这样做,它会绕过它: request.done( function( response ) { console.log( "Success" ); console.log( $( response ).find( "Guid" ).text() ); console.log( $( response ).find( "Text" ).text() ); console.log( $( response ).find( "Image" ).text() ); } );
    • 你为什么不修改你的 web 方法以返回 JSON 而不是 XML?
    • 您的意思是使用 [ScriptMethod(ResponseFormat = ResponseFormat.Json)]?已经试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2018-01-16
    • 2011-06-05
    相关资源
    最近更新 更多