我有一个ajax调用,其中我使用jQuery.ajax()向mvc操作发出请求。这一切都很好。但是由于某些形式具有文件控制,我将其从使用jQuery.ajax()更改为使用XMLHttpRequest通过HTML5 File API发送。
由于进行了此更改,因此MVC操作方法不再将其视为ajax请求。使用Fiddler2,我注意到它不再向请求添加“ X-Requested- With:XMLHttpRequest”,并且我认为这是问题所在。
我尝试发送的表单中没有文件输入,只有普通的文本框等,但是我试图使该方法通用以同时处理这两种情况。以下是我用来发送ajax请求的代码:
// get the edit tender form var $Form = $Button.closest('form'); var Url = $Form.attr('action'); var AjaxRequestObject = new XMLHttpRequest(); var FormDataToSend = new FormData(); $Form.find(':input').each(function () { if ($(this).is('input[type="file"]')) { var files = $(this)[0].files; if (files.length > 0) { FormDataToSend.append(this.name, files[0]); } } else { FormDataToSend.append(this.name, $(this).val()); } }); AjaxRequestObject.open('POST', Url, true); AjaxRequestObject.onreadystatechange = function () { if (AjaxRequestObject.readyState == 4) { // handle response. if (AjaxRequestObject.status == 200) { if (!AjaxErrorExists(AjaxRequestObject.responseText, )) { alert("success"); console.log(AjaxRequestObject.responseText); } else { alert('failure'); } } else { alert('failure'); } } }; AjaxRequestObject.send(FormDataToSend);
此代码是在我遇到了Darin Dimitrov提供解决方案的问题后提供的,因此我可以通过ajax发送文件输入。
有什么想法为什么这个请求不会发送ajax调用的标头?
X-Requested- With由jQuery自动添加。您也可以使用自己轻松添加它AjaxRequestObject.setRequestHeader()。文件
X-Requested- With
AjaxRequestObject.setRequestHeader()