Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax调用半工作模式。。。已上载文件,但未执行javascript_Javascript_Ajax_File_Upload_Callback - Fatal编程技术网

Ajax调用半工作模式。。。已上载文件,但未执行javascript

Ajax调用半工作模式。。。已上载文件,但未执行javascript,javascript,ajax,file,upload,callback,Javascript,Ajax,File,Upload,Callback,我很抱歉这个问题,但我有一个持续的错误,我不明白到底发生了什么 我有一个ajax上传功能,工作正常 function startUp(hash) { $('#file_up_form').ajaxForm({ beforeSend: function(xhr) { xhr.setRequestHeader("X-CSRF-Token", '{{ Ses

我很抱歉这个问题,但我有一个持续的错误,我不明白到底发生了什么

我有一个ajax上传功能,工作正常

function startUp(hash) {

    $('#file_up_form').ajaxForm({
                                beforeSend: function(xhr) {
                                    xhr.setRequestHeader("X-CSRF-Token", '{{ Session::token() }}' );
                                    xhr.setRequestHeader('Sha-Sha',hash);
                                    //other stuff
                                    },

                                uploadProgress: function(event, position, total, percentComplete) {
                                 //some stuff
                                },

                                complete : function(xhr) {
                                     //some stuff
                                },

                                error : function(xhr) {
                                    //some stuff
                                }

                            });
 }
当我这样称呼它时:

$("#start_up_button").on('click', function() {

        if(checkFile()){

            startUp('f4274dd2284704f1158b2cecd71666a37ba5b949f97fc521974f98fa3dd0ea706cca7253244e20f2a4c4c694052097c45260edfe679c9e7b56896858a34839cd');
            //getHash();
        }

        else{
            $('#myModalerror').modal('show');
            $("#myModalerror").css("z-index", "1500");
        }
    }); 
一切正常。 但是,当我取消注释第二行并注释第一行时,我将从中调用它:

function getHash(){

        input = document.getElementById('fileToUpload');

        file = input.files[0];
        var reader = new FileReader();

        reader.onload = function(e) {
            var shaObj = new jsSHA(reader.result,"BYTES");
            var hash = shaObj.getHash("SHA-512", "HEX");
            console.log(hash);
            startUp(hash);
        };
        reader.readAsBinaryString(file);

   }
ajax不起任何作用:console.log显示正确的哈希,但没有设置任何头,并且“//some stuff”中的任何内容都不起作用。。。但是文件被上传了!!(??)我试着用一个字母来结束这个电话

setTimeout(function() {
                            startUp(hash);      
                                    }, 200);
但Firefox只是崩溃了。有什么想法吗


thx

$('#file_up_form')中
ajaxForm()
的行为。ajaxForm({…})是而不是触发AJAX请求

它是一个事件绑定函数。(我没有看过API文档,但它可能将表单提交事件绑定到其内部库函数之一)

要真正触发AJAX请求,您必须在HTML
中添加一个
按钮,然后单击它。(库将阻止传统表单提交,并通过AJAX提交)

实施示例:

<script type="text/javascript">
$(document).ready(function(){
    $("#file_up_form").ajaxForm({ // bind library function to the form
        beforeSend: function(xhr){
            input = document.getElementById('fileToUpload');;

            file = input.files[0];

            if(file){
                var reader = new FileReader();
                reader.readAsBinaryString(file);

                var shaObj = new jsSHA(reader.result,"BYTES");
                var hash = shaObj.getHash("SHA-512", "HEX");

                xhr.setRequestHeader('Sha-Sha', hash);
            }else{
                alert("First, please select a file to upload.");
                return false;
            }
        },
        uploadProgress: function(event, position, total, percentComplete){ },
        success: function() { },
        complete: function(response) { },
        error: function() { }
    });
});
</script>
<body>
    <form id="file_up_form" action="upload.php" method="post">
        <input type="file" id="fileToUpload" name="uploadedfile" />
        <!-- Click on submit to perform AJAX call -->
        <input type="submit" value="Upload"> 
    </form>
</body>
JS:

<script type="text/javascript">
$(document).ready(function(){
    $("#file_up_form").ajaxForm({ // bind library function to the form
        beforeSend: function(xhr){
            input = document.getElementById('fileToUpload');;

            file = input.files[0];

            if(file){
                var reader = new FileReader();
                reader.readAsBinaryString(file);

                var shaObj = new jsSHA(reader.result,"BYTES");
                var hash = shaObj.getHash("SHA-512", "HEX");

                xhr.setRequestHeader('Sha-Sha', hash);
            }else{
                alert("First, please select a file to upload.");
                return false;
            }
        },
        uploadProgress: function(event, position, total, percentComplete){ },
        success: function() { },
        complete: function(response) { },
        error: function() { }
    });
});
</script>
<body>
    <form id="file_up_form" action="upload.php" method="post">
        <input type="file" id="fileToUpload" name="uploadedfile" />
        <!-- Click on submit to perform AJAX call -->
        <input type="submit" value="Upload"> 
    </form>
</body>

$(文档).ready(函数(){
$(“#file_up_form”).ajaxForm({//将库函数绑定到表单
发送前:函数(xhr){
input=document.getElementById('fileToUpload');;
file=input.files[0];
如果(文件){
var reader=new FileReader();
reader.readAsBinaryString(文件);
var shaObj=newjssha(reader.result,“字节”);
var hash=shaObj.getHash(“SHA-512”,“十六进制”);
setRequestHeader('Sha-Sha',散列);
}否则{
警报(“首先,请选择要上载的文件。”);
返回false;
}
},
uploadProgress:函数(事件、位置、总数、完成百分比){},
成功:函数(){},
完成:函数(响应){},
错误:函数(){}
});
});
HTML:

<script type="text/javascript">
$(document).ready(function(){
    $("#file_up_form").ajaxForm({ // bind library function to the form
        beforeSend: function(xhr){
            input = document.getElementById('fileToUpload');;

            file = input.files[0];

            if(file){
                var reader = new FileReader();
                reader.readAsBinaryString(file);

                var shaObj = new jsSHA(reader.result,"BYTES");
                var hash = shaObj.getHash("SHA-512", "HEX");

                xhr.setRequestHeader('Sha-Sha', hash);
            }else{
                alert("First, please select a file to upload.");
                return false;
            }
        },
        uploadProgress: function(event, position, total, percentComplete){ },
        success: function() { },
        complete: function(response) { },
        error: function() { }
    });
});
</script>
<body>
    <form id="file_up_form" action="upload.php" method="post">
        <input type="file" id="fileToUpload" name="uploadedfile" />
        <!-- Click on submit to perform AJAX call -->
        <input type="submit" value="Upload"> 
    </form>
</body>

Thx

但这不起作用,因为javascript是****不同步的,我需要强制与
reader.onload()回调进行同步,然后调用ajax。。。ajax请求将被发送,无论是否计算了哈希,如果我在
.ajaxForm()
中,它就结束了,甚至
setTimeout(function(){…})
本身也是异步的,因此它对发送ajax请求没有任何影响。。。或者如果我把它放在另一个地方,它就会崩溃firefox

我有一个上传按钮来触发请求,正如你提到的,当然,这是我必须首先处理sha-512的计算,然后使用表单绑定触发ajax的唯一触发器

但我不明白的是:

为什么
“startUp('ARandomHash');”
$(“#start_up_按钮”)中工作得非常好
散列=…;console.log(散列);startUp(散列);“
打印正确的散列,但ajax在
读取器.onload()回调中完全失败。。。该事件由同一个单击事件触发,它只有2个执行范围更多

我不认为我失去了提交事件与这2个范围更多,因为文件上传正确。。。只是发送之前的
、上载进度:…
等未执行

我想我更愿意尝试转换散列,它可能是一个字符编码问题,否则没有意义,它应该会失败,
“启动('ARandomHash');”

但是thx,如果有人有更好的主意=)