2017-05-04 113 views
1

我用ajaxSetup功能类似下面JQuery的ajaxSetup - 附加的全球数据FORMDATA

$.ajaxSetup({ 
    data: { 
     csrf: csrfValue 
    } 
}); 

也能正常工作的所有请求,除了当我做一个AJAX文件上传

传递全局参数在所有的jQuery Ajax请求
var formData = new FormData(); 
formData.append('attachedFile', file); 
$.ajax({ 
     url: '/fileUpload', 
     data: formData, 
     success: function() { 
      .... 
     } 
}); 

由于我使用的是FormData,因此不会追加csrf参数。有没有一种正确的方法将常用数据附加到所有类型的Ajax请求?

+0

里面的隐藏字段与追加'CSRF尝试:csrfValue'数据。像这样,'data:formData + csrf +“=”+ csrfValue'。 –

+0

你可以显示其他请求片段,其中ajaxsetup工作正常吗? – Manwal

+0

@Manwal适用于数据只是json对象的所有请求。 – Krishnaraj

回答

0

您可以通过使用$.extend$.ajaxPrefilter与您所提供的数据合并的默认数据解决这个问题: UPDATED:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
    if (originalOptions.data instanceof FormData) { 
     originalOptions.data.append(csrfParamName, csrfParamValue); 
    } 
}); 
+0

这不幸的是不工作。 formData的其他参数只在你使用append方法时才起作用:(。 – Krishnaraj

+0

不要以为'$ .extend'永远不能工作'FormData',但使用'ajaxPrefilter'似乎是一个不错的选择。 。 '如果(originalOptions.data的instanceof FORMDATA){ originalOptions.data.append(csrfParamName,csrfParamValue); }' – Krishnaraj

+0

@Krishnaraj $ .extend行为就像您将其追加合并两个对象https://开头的API。 jquery.com/jquery.extend/ –

0

是因为你使用的FORMDATA这是行不通的。 添加csrfValue您AJAX数据或 添加您的形式

<input type="hidden" value="{{ csrfValue }}"?>