使用 form.submit() 时出错

Posted

技术标签:

【中文标题】使用 form.submit() 时出错【英文标题】:Error when using form.submit() 【发布时间】:2013-04-07 03:59:21 【问题描述】:

我们的应用程序使用extjs and webapi(C#)。我的表单有一个fileupload 控件。当我们在extjs中使用form.sumbit()时,是不会去success函数的。

WebApi 代码:

bool SaveData(Employee obj)

     return true;

Extjs 代码:

form.submit( 
               url: '../api/Empcontroller/SaveData',
               method: 'POST',
               headers: 
               'Content-Type': 'application/json'
                         ,
               success: function ( fp, o )
               


               ,
               failure: function ( fp, o )
               

               
             );

我在所有浏览器中都得到了正确的响应。在Chrome 取得成功,但在Firefox its not.

【问题讨论】:

你检查过 FireBug...? 还可以通过Ctrl+Shift+J查看 Firefox 控制台 【参考方案1】:

尝试像这样添加 dataType 参数:

form.submit(
   url: '../api/Empcontroller/SaveData',
   method: 'POST',
   headers: 
       'Content-Type': 'application/json'
   ,
   dataType: 'json',
   success: function (fp, o) 

   ,
   failure: function (fp, o) 

   
);

我也见过这样做的:(将 json_data_here 替换为您需要发送的任何数据)

form.submit(Ext.Ajax.request(    
    url: '/../api/Empcontroller/SaveData',
    method: 'GET',
    jsonData: json_data_here,
    headers: 'Content-Type' : 'application/json' , 'Accept' : 'application/json'
));

【讨论】:

【参考方案2】:

似乎有一个 FireFox 的错误会影响内容类型...

JQuery - $.ajax ContentType Problem in Firefox

【讨论】:

【参考方案3】:

尝试在提交中添加匿名函数而不是 json:

form.submit( function()
               url: '../api/Empcontroller/SaveData',
               method: 'POST',
               headers: 
               'Content-Type': 'application/json'
                         ,
               success: function ( fp, o )
               


               ,
               failure: function ( fp, o )
               

               
             );

【讨论】:

【参考方案4】:

嗯嗯。奇怪的。 我想我发现了这个错误。 当我将 'asyncron' 状态设置为 'false' 告诉脚本等待 serverrequest 的回复时,FireFox 不喜欢它。

所以而不是 http.open("GET", destURL, true); 我在用 http.open("GET", destURL, false);

Firefox dont accept asynchron Option on "false"

【讨论】:

【参考方案5】:

我不确定这是否是问题所在。但是文件上传不需要enctype 尝试使用

enctype = multipart/form-data

这可能会有所帮助

【讨论】:

【参考方案6】:

试试这个:

form.submit( function()
    url: '../api/Empcontroller/SaveData',method: 'POST',
    headers: 'Content-Type': 'application/json',
    success: function (fp, o ),
    failure: function (fp, o )
);

【讨论】:

【参考方案7】:

使用下面的代码。

form.submit( 
               url: '../api/Empcontroller/SaveData',
               method: 'POST',
               headers: 
               'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                         ,
               success: function ( fp, o )
               


               ,
               failure: function ( fp, o )
               

               
             );

我刚刚更改了内容类型。

【讨论】:

以上是关于使用 form.submit() 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 submit() 方法提交表单时的回调

如何将数据附加到请求 form.submit()

js提交表单错误:document.form.submit() is not a function

等待 form.submit() / POST 完成

jQuery Validate:submitHandler 提交表单而不点击 form.submit

在form.submit之后的extjs store.load