Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用AJAX上载文件_Javascript_Jquery - Fatal编程技术网

Javascript 无法使用AJAX上载文件

Javascript 无法使用AJAX上载文件,javascript,jquery,Javascript,Jquery,我正试图通过AJAX上传一个文件。我已经搜索了很多,但发现的例子只使用表单提交,但我不能使用表单提交。我已经尝试了几个例子,但没有达到我的服务器。当我尝试时,它成功了,但同样是通过表单提交 下面是一段与上下文相关的代码 JS代码 function _upload(filedata) { $.ajax({ url: './myURI', data: filedata, type: 'POST', contentType: '

我正试图通过AJAX上传一个文件。我已经搜索了很多,但发现的例子只使用表单提交,但我不能使用表单提交。我已经尝试了几个例子,但没有达到我的服务器。当我尝试时,它成功了,但同样是通过表单提交

下面是一段与上下文相关的代码

JS代码

function _upload(filedata) {
    $.ajax({
        url: './myURI',
        data: filedata,
        type: 'POST',

        contentType: 'multipart/form-data',
        mimeType: 'multipart/form-data',    //Property added in 1.5.1

        success: function (data) {
            alert(data);
        }
    });
}
$("#cpc-uploadBtn").click(function (evt) {
                var data;
                data = new FormData();
                data.append('file', $('#cpc-upload')[0].files[0]);
                _upload(data);

            });
HTML部分

    <input id="cpc-upload" name="file" type="file" />
    <button id="cpc-uploadBtn" type="button">Upload</button>

上传
编辑
如果不使用表单提交和表单数据,还有其他方法可以做到这一点吗?

我想目前只有Safari/Firefox支持表单数据对象,它还没有被大多数浏览器采用

最近,我在寻找asp.net的ajax文件上载程序时遇到了很多困难,目前我正在我的项目中使用此程序:


如果您想使用

<script>
    // wait for the DOM to be loaded
    $(document).ready(function() 
    {
        // bind 'myForm' and provide a simple callback function
       $("#tempForm").ajaxForm({
       url:'../calling action or servlet',
       type:'post',
       beforeSend:function()
       {
         alert("perform action before making the ajax call like showing soinner image");
       },
       success:function(e){
        alert("data is"+e);
            alert("now do whatever you want with the data");
       }
       });
    });
</script>

//等待加载DOM
$(文档).ready(函数()
{
//绑定“myForm”并提供一个简单的回调函数
$(“#tempForm”).ajaxForm({
url:“../正在调用操作或servlet”,
类型:'post',
beforeSend:function()
{
警报(“在进行ajax调用之前执行操作,如显示soinner图像”);
},
成功:职能(e){
警报(“数据为”+e);
警报(“现在对数据做任何你想做的事”);
}
});
});

如果您使用的是Safari/FireFox(仅支持
FormData
),您可以找到该插件。您需要修改
$。ajax
调用:

$.ajax({
    url: './myURI',
    data: filedata,
    type: 'POST',
    contentType: false,
    processData: false,
    success: function (data) {
        alert(data);
    }
});
contentType
选项设置为false将强制jQuery不为您添加内容类型头(否则边界字符串将丢失)。另外,
processData
标志必须设置为false,以便jQuery不会尝试将
FormData
转换为字符串

现在,如果您知道您的客户端正在使用HTML5,您应该尝试使用新的JavaScript文件API-查看以下文章:

在所有其他情况下,您必须使用自定义插件,例如:


您不能使用form submit的原因是什么?我不能起诉form submit,因为它需要返回一个视图,但我希望在请求被服务后会出现一个成功/失败字符串。我不能使用任何插件。如果还有其他工作,请更新您的答案?