首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails以"text“的形式发送JSON,但是IE加载它的ajax URL并显示它的响应:为什么?

Grails以"text“的形式发送JSON,但是IE加载它的ajax URL并显示它的响应:为什么?
EN

Stack Overflow用户
提问于 2015-08-11 14:41:19
回答 1查看 58关注 0票数 0

我一直在开发一个应用程序,它必须在两种不同的情况下提交带有文件上传字段的表单。在同一个应用程序中,这两种情况在Firefox和Chrome中都能很好地工作,但是当我们在IE上运行它时,其中一种情况就失败了。

SITUATION #1 (它在FF、Chrome、IE9-7中工作得很好):

代码语言:javascript
复制
/* controller */
def salvarArquivo() {   
    /* service calls, etc */

    uploadStatusJSON = uploadStatus as JSON     
    render uploadStatusJSON.toString()
}

--

代码语言:javascript
复制
/* JS - I'm using ajaxForm plugin by [malsup][1] */
$('#formularioEnviarArquivo').ajaxForm({
    beforeSubmit: validateFileUploadForm,
    clearForm   : true,
    dataType    : 'text',
    success     : function(dataStr) {
        var dataObj = $.parseJSON(dataStr);
        if (dataObj.status == false) {
            /* do this */
        } else {
            /* do that */
        }
    }
});

它返回一个正确的JSON-text,它被解析为一个JS对象,JS代码正确地处理它,我有一个很好的页面,它有一个很好的UX。

情景#2 (在IE9或更高版本中失败):

代码语言:javascript
复制
/* controller */
def salvarComentarioAjax(){
    /* service, queries, etc
    * ask me more details */    

    def historicoJSON = historico as JSON
    render historicoJSON.toString() 
} // end method

--

代码语言:javascript
复制
/* JS */
$(document).ready(function(){
    /* validation stuff */  

    $('#formEnviarHistorico').ajaxForm({
        beforeSubmit    : function(){
            $('#submitFile').button('loading');
        },
        clearForm       : true,
        dataType        : 'text',
        success         : function(dataStr){
            var data = $.parseJSON(dataStr);
            if(data.status == false){
                /* do this */
            }else{
                /* do that */
            }   
        } // end success
    });
});

--

代码语言:javascript
复制
{"status":true,"comentario":"teste","arquivos":[{"status":true,"nome":"Hydrangeas.jpg","caminho":"http://192.168.0.81:8080/vs3/arq/atendimentos/20150811111634517_224442_Hydrangeas.jpg","mensagem":"OK"}],"nomeUsuario":"CINTIA BERNARDI","confidencial":false,"dataCadastro":"2015-08-11T14:16:34Z","id":251769,"foto":{"img":{"FD":{"class":"java.io.FileDescriptor"},"channel":{"class":"sun.nio.ch.FileChannelImpl","open":true},"class":"java.io.FileInputStream"},"path":"images/img_perfil/4a94303760487537892d8af0b5c47642.jpg","nomeFoto":"4a94303760487537892d8af0b5c47642.jpg"}}

我能证实什么?还要别的吗?我已经阅读了很多关于将contentType设置为'text/plain'等的建议,但可能我已经尝试过所有这些建议,将ajax的dataType设置为'text''json'

EN

回答 1

Stack Overflow用户

发布于 2015-08-11 14:49:30

令人费解的是,我的客户端表单验证由jQuery验证插件驱动导致了这种情况。

代码语言:javascript
复制
/* JS */
$(document).ready(function(){

    /* validation stuff -> ACTUALLY IT IS: */  
    $('form[name=formEnviarHistorico]').validate(validacaoHistorico);
    /* It is jQuery Validate plugin!!! */

    $('#formEnviarHistorico').ajaxForm({
        beforeSubmit    : function(){
            $('#submitFile').button('loading');
        },
        clearForm       : true,
        dataType        : 'text',
        success         : function(dataStr){
            var data = $.parseJSON(dataStr);
            if(data.status == false){
                /* do this */
            }else{
                /* do that */
            }   
        } // end success
    });
});

如果用户浏览器是IE9或更高版本,并且运行得很好,我就创建了一个IF条件来避免这条验证行。目前,我的验证只在服务器端进行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31944883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档