如何处理从.ajaxSubmit()调用返回的数据?

时间:2010-11-30 20:22:23

标签: jquery

我正在使用Jquery Form Plugin提交这样的表单数据。

    $('#AddLocalImageForm').ajaxSubmit({
                    beforeSubmit: function() { alert('b4'); },
                    success: function(data) { alert('afa');},
                    dataType: 'json'
                });


<form id="AddLocalImageForm" action="Service/UploadCustImage.ashx" method="post" enctype="multipart/form-data">
        <input type="file" name="CustImage" id="CustImage" />
    <br />
    <label for="ImageName">Name</label> 
        <input type="text" name="ImageName" id="ImageName"/>
    <br />
    <input type="submit" />
</form> 

我发布数据的页面是一个

的ashx页面
context.Response.ContentType = "application/json";

并使用

返回数据
context.Response.Write(JsonData);

我可以看到所有内容都已正确发布,我正在获取核心Json Data,但我总是被提示从我的浏览器下载Json数据。 我想要做的是能够在后台获取返回的数据并更新一些Dom元素。 beforeSubmit函数执行但成功函数永远不会执行。 如果我从插件sample页面复制代码,我会得到同样的结果。

如何才能使返回的数据由函数处理,而不是提示我下载?

更新 因此,如果我将处理发布数据的ashx页面上的内容类型更改为

context.Response.ContentType = "text/html";

我不再提示我下载文件,但我仍然无法处理返回的数据,因为成功函数永远不会执行。我是否需要告诉它成功或者是否返回数据是否只是假设成功?

2 个答案:

答案 0 :(得分:3)

回答我自己的问题,希望有一天能帮助别人。

所以看起来成功永远不会运行的原因是因为它不相信请求成功。 如果我改为

            $('#AddLocalImageForm').ajaxSubmit({
                    beforeSubmit: function() { alert('b4'); },
                    success: function() { alert('Run on Success'); },
                    error: function(request, errordata, errorObject) { alert(errorObject.toString()); },
                    dataType: 'json'
                });

将ASHX的ContentType设置为

   context.Response.ContentType = "text/html";

我收到ASHX返回无效json的错误。所以,如果我注释掉像

这样的dataType选项
                $('#AddLocalImageForm').ajaxSubmit({
                    beforeSubmit: function() { alert('b4'); },
                    success: function() { alert('Run on Success'); },
                    error: function(request, errordata, errorObject) { alert(errorObject.toString()); }
                    //dataType: 'json'
                });

我没有被提示下载该文件,并且能够处理返回的Json;

<强> Wheeewwwww !!!

答案 1 :(得分:2)

文件输入确实会导致AJAX提交出现大量问题,因为XMLHttpRequest不支持它,Form插件有一个解决方法,但就返回数据而言,这意味着表单的工作方式与通常略有不同

阅读有关file upload issue

的插件文档