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\*.* [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 和 jQuery 中的 C:\fakepath\*.* [重复]

深入理解jQuery中的ajax

深入理解ajax系列第九篇——jQuery中的ajax

如何优化 Jquery 中的 ajax 请求? [关闭]

jquery中的ajax

js-重写jquery的ajax中的内容