Ajax 和 jQuery 中的 C:\fakepath\*.* [重复]
Posted
技术标签:
【中文标题】Ajax 和 jQuery 中的 C:\\fakepath\\*.* [重复]【英文标题】:C:\fakepath\*.* in Ajax and jQuery [duplicate]Ajax 和 jQuery 中的 C:\fakepath\*.* [重复] 【发布时间】:2014-02-24 12:42:42 【问题描述】:我正在尝试获取一个能够通过某些 AJAX 和 jQuery 的文档,并且在尝试通过它时我只是不断地收到 C:\fakepath\
。我知道这是浏览器中的一项安全功能,但我还没有找到解决它的方法,以便它通过文档。
这是我的代码和 jsfiddle。
<form method="post" action="contact.php" name="contactform" id="contactform" enctype="multipart/form-data">
<label for="email" accesskey="E"><span class="required">*</span> FBN Document</label>
<input name="fbndoc" type="file" id="fbndoc" size="30" value="" />
jQuery(document).ready(function ()
$('#contactform').submit(function ()
var action = $(this).attr('action');
var values = $.map($('[name^="attribute"]'), function (elem)
return
name: elem.name,
value: elem.value
;
);
$("#message").slideUp(750, function ()
$('#message').hide();
$('#submit')
.after('<img src="assets/ajax-loader.gif" class="loader" />')
.attr('disabled', 'disabled');
$.post(action,
firstname: $('#firstname').val(),
lastname: $('#lastname').val(),
email: $('#email').val(),
contactphone: $('#contactphone').val(),
values: $('values').val(),
fbn: $('#fbn').val(),
fbns: values,
fbnnumber: $('#fbnnumber').val(),
fbnaddress: $('#fbnaddress').val(),
fbncity: $('#fbncity').val(),
fbnstate: $('#fbnstate').val(),
fbnzip: $('#fbnzip').val(),
owneraddress: $('#owneraddress').val(),
ownercity: $('#ownercity').val(),
ownerstate: $('#ownerstate').val(),
ownerzip: $('#ownerzip').val(),
businesstype: $('#businesstype').val(),
otherField: $('#otherField').val(),
commencedate: $('#commencedate').val(),
fbndoc: $('#fbndoc').val(),
comments: $('#comments').val(),
form_type: $('#form_type').val(),
verify: $('#verify').val()
,
function (data)
document.getElementById('message').innerhtml = data;
$('#message').slideDown('slow');
$('#contactform img.loader').fadeOut('slow', function ()
$(this).remove()
);
$('#submit').removeAttr('disabled');
if (data.match('success') != null) $('#contactform').slideUp('slow');
);
);
return false;
);
);
jsfiddle 可以在这里找到:http://jsfiddle.net/g29wQ/
【问题讨论】:
如果您可以通过一项安全功能,它不会很安全,不是吗? ;) 请提供更好的解释,说明您要做什么,不是很清楚。 为什么需要知道本地文件结构?如果你试图实现一个 ajax 上传器,那你就错了。 我正在尝试使用一些 jquery 以表单形式上传文档,以在此过程中验证文档。如果一切都提交了,那么将所有数据(包括文档)传递给 php 脚本 谢谢!对我完全没用。我会确保我看你的帖子 -1 @MrTechie 我的意思是你不能简单地使用 .val() 来上传文件。它的参与程度远不止于此。在将表单字段传递给 FormData 对象时,您仍然可以进行所有表单验证。这里有很好的记录:developer.mozilla.org/en-US/docs/Web/API/FormData我链接到的问题上最受好评的答案也很好地解释了这个过程。 【参考方案1】:您是通过 ajax 文件名发送的,而不是它的内容:
fbndoc: $('#fbndoc').val()
如果您想通过 ajax 上传文件内容,最好使用FormData
,例如使用 jQuery:
var fd = new FormData($('#fbndoc').get(0));
fd.append("CustomField", "This is some extra data");//add all you data here like this
$.ajax(
url: "stash.php",
type: "POST",
data: fd,
processData: false, // tell jQuery not to process the data
contentType: false // tell jQuery not to set contentType
);
【讨论】:
但我仍然希望它能够像现在这样,检查正在填写的其他字段的验证,而不仅仅是自动发送数据 @MrTechie 和?你仍然可以使用 FormData 来做到这一点。 如果我以他的例子为例,并将其添加到 jquery 函数中 - 它只是自动将其推送到 php 脚本中,并且永远不会像我想要的那样做任何验证工作。这是目前的设置,它只是推送到 php 脚本而不是验证:jsfiddle.net/5M8jM 您不想以他的示例行为行,您需要修改第二个 sn-p 的第一行以创建一个空的 formdata 对象,然后您需要填充它。有关示例,请参阅 FormData 的 MDN 文档。以上是关于Ajax 和 jQuery 中的 C:\fakepath\*.* [重复]的主要内容,如果未能解决你的问题,请参考以下文章