在我的footer.php中,我有我的api引用所需的代码
<script type="text/javascript">
/** Override ajaxSend so we can add the api key for every call **/
$(document).ajaxSend(function(e, xhr, options)
{
xhr.setRequestHeader("<?php echo $this->config->item('rest_key_name');?>", "<?php echo $this->session->userdata('api_key')?>");
});
</script>
它在我的项目中工作正常,没有任何错误但是当我开始处理文件上传并且我使用ajaxfileupload上传文件时,每当我上传文件时都会收到此错误。
TypeError: xhr.setRequestHeader is not a function
xhr.setRequestHeader("KEY", "123456POIUMSSD");
这是我的ajaxfileuplod程序代码:
<script type="text/javascript">
$(document).ready(function() {
var DocsMasterView = Backbone.View.extend({
el: $("#documents-info"),
initialize: function () {
},
events: {
'submit' : 'test'
},
test: function (e) {
e.preventDefault();
var request = $.ajaxFileUpload({
url :'./crew-upload-file',
secureuri :false,
fileElementId :'userfile',
dataType : 'json',
data : {
'title' : $('#title').val()
},
success : function (data, status)
{
if(data.status != 'error')
{
$('#files').html('<p>Reloading files...</p>');
refresh_files();
$('#title').val('');
}
alert(data.msg);
}
});
request.abort();
return false;
}
});
var x = new DocsMasterView();
});
</script>
任何人都可以解决我的问题。任何建议/建议,以解决我的问题。
答案 0 :(得分:0)
据我所知,setRequestHeaders
可以正常使用ajax调用。同时,在使用ajaxFileUpload
时,它不可用。很可能是因为传输方法不允许设置标头(例如,在iframe用于模拟ajax样式的文件上传的情况下)。因此,可能的解决方案是将密钥放入表单数据中:
$(document).ajaxSend(function(e, xhr, options)
{
if(xhr.setRequestHeader) {
xhr.setRequestHeader("<?php echo $this->config->item('rest_key_name');?>", "<?php echo $this->session->userdata('api_key')?>");
else
options.data["<?php echo $this->config->item('rest_key_name');?>"] = "<?php echo $this->session->userdata('api_key')?>";
});
注意:我不确定options.data是否是正确的语句,只是不记得options对象的结构。如果建议的代码不起作用 - 尝试console.log(options)
以及如何执行
获取一个包含应该发布的数据的对象(可能是options.formData
,我只是不记得了)
在服务器端,您只需要检查标题或表单数据中的键。