IE tries to download json response while submitting jQuery multipart form data containing file

后端 未结 9 652
别那么骄傲
别那么骄傲 2020-12-14 15:03

I\'m trying to submit a form with a file field in it via jQuery.Form plugin, here\'s the code:

$(\'form\').ajaxSubmit({
  url: \"/path\",
  data         


        
相关标签:
9条回答
  • 2020-12-14 15:08

    I have not found a direct solution to this, but I eventually implemented the following workaround: I used dataType: "text" in my ajax settings and then returned plaintext from controller, separating values with ; and parsing them on the client side. That way IE and Forefox stopped trying to download a response.

    I did not find any other way to prevent said behavior other then to return plaintext. I tried returning JSON as plaintext and then parsing it with $.parseJSON, but it didn't work due to some js errors.

    0 讨论(0)
  • 2020-12-14 15:09

    Just send response with 'Content-Type', 'text/html' header.

    0 讨论(0)
  • 2020-12-14 15:11

    This site has some info about wrapping the response in a http://forum.jquery.com/topic/jquery-form-malsup-ie7-file-download-security-warning-on-ajax-file-upload

    I seemed to be able to fix my problem by making my server return the JSON as a string. Then I used JSON.parse() inside the complete event.

    0 讨论(0)
  • 2020-12-14 15:17

    Removing ContentType from serverside works for me.

    0 讨论(0)
  • 2020-12-14 15:20

    You can simply return JSON from the controller as "text/html" and then parse it on the client side using JQuery.parseJSON().

    Controller:

        return this.Json(
                new
                    {
                        prop1 = 5,
                        prop2 = 10
                    }, 
                "text/html");
    

    Client side:

    jsonResponse = $.parseJSON(response);
    
    if(jsonResponse.prop1==5) {
         ...
    }
    

    This solution has been working for me.

    0 讨论(0)
  • 2020-12-14 15:20

    Same situation than you folks : the problem only occurs with enctype="multipart/form-data" form used with $(form).ajaxSubmit(...) function.

    My team and I had to replace (in this function) dataType: 'json' option with dataType: 'text' and add responseText = $.parseJSON(responseText); to force server response parsing.

    Of course we also had to step in server side to return a response with "text/plain" header instead of "application/json"

    We're not proud of it :( IE is definitely killing everything...

    I didn't try the advice given by zmonteca (already spent too much time on it) but it seems worthy : let us know if it was OK for you.

    Hope it helps!

    0 讨论(0)
提交回复
热议问题