Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 dropzone-var在另一个函数';让我们第一次点击_Javascript_Jquery_Xmlhttprequest_Dropzone.js - Fatal编程技术网

Javascript dropzone-var在另一个函数';让我们第一次点击

Javascript dropzone-var在另一个函数';让我们第一次点击,javascript,jquery,xmlhttprequest,dropzone.js,Javascript,Jquery,Xmlhttprequest,Dropzone.js,我有一个dropzone注册表,我想用插件验证它(字段)。我在dropzone init中调用这个插件,在其函数的回调中处理dropzone队列并附加表单数据 问题是,我第一次单击Send按钮时,什么也没发生:它只是进入函数的回调,什么也不做(myDropzone不工作),只有console.log()(我放在那里进行调试) 这是我正在使用的插件: (function($) { $.fn.formly = function(callback) { $('a#click')

我有一个dropzone注册表,我想用插件验证它(字段)。我在dropzone init中调用这个插件,在其函数的回调中处理dropzone队列并附加表单数据

问题是,我第一次单击
Send
按钮时,什么也没发生:它只是进入函数的回调,什么也不做(
myDropzone
不工作),只有
console.log()
(我放在那里进行调试)

这是我正在使用的插件:

(function($) {
    $.fn.formly = function(callback) {
        $('a#click').on('click', function() {
            if (callback) {

                var clientInfo = form.find(':input').serializeArray();

                clientInfo.splice(-1, 1);
                clientInfo.splice(-1, 1);

                // Password hash function
                var p = $('#reg_pwd').val(),
                    c = $('#confirm_pwd').val(),
                    shaObj = new jsSHA('SHA-512', 'TEXT');

                shaObj.update(p);
                var p_hash = shaObj.getHash("HEX"),
                    shaObj = new jsSHA('SHA-512', 'TEXT');

                shaObj.update(c);
                var c_hash = shaObj.getHash("HEX");

                callback(clientInfo, p_hash, c_hash);
            }
        });
    };
})( jQuery );
这是dropzone初始化:

init: function() {
    var myDropzone = this;

    $('#register').formly(function(clientInfo, p_hash, c_hash) {
console.log(myDropzone);
        myDropzone.processQueue();

        myDropzone.on('sending', function(data, xhr, formData) {
            formData.append('client_info', JSON.stringify(clientInfo)),
            formData.append('particular', 0),
            formData.append('reg_pwd', p_hash),
            formData.append('confirm_pwd', c_hash)
        });

    });

    myDropzone.on('success', function(file, response) {
        myDropzone.removeFile(file);
        console.log( 'Error: ' + response );
    });
}
我可以看到控制台中记录的对象

这就像我第一次单击按钮时没有向服务器发送任何内容(没有xhr请求)

第二次单击“发送”时,它确实工作了(它发送xhr请求),我得到了一个服务器响应(
myDropzone.on('success'


为什么在第一次之后它会工作?我做错了什么?我如何修复它?

我对代码为什么会这样做有一个模糊的想法,但我缺乏必要的知识(理论)来正确解释它

无论如何,我(认为)找到了一个正确的方法,我希望它能达到好的技术标准。我现在使用一个函数在dropzone init中填充一个作用域对象,以便
。on('sending')
(应该在插件回调之外)可以访问表单数据:

init: function() {

    var myDropzone = this,
        client = {};

    function getClientData(clientInfo, p_hash, c_hash) {
        client.clientInfo   = clientInfo;
        client.p_hash       = p_hash;
        client.c_hash       = c_hash;
        myDropzone.processQueue();
    };

    $('#register').formly(function(clientInfo, p_hash, c_hash) {

        getClientData(clientInfo, p_hash, c_hash);

    });

    myDropzone.on('sending', function(data, xhr, formData) {
        formData.append('client_info', JSON.stringify(client.clientInfo)),
        formData.append('particular', 0),
        formData.append('reg_pwd', client.p_hash),
        formData.append('confirm_pwd', client.c_hash)
    });

    myDropzone.on('success', function(file, response) {
        myDropzone.removeFile(file);
        console.log( 'Error: ' + response );
    })

}

我很乐意接受另一个解释原始代码行为的答案,并有更好的方法(如果有的话)。

我对代码为什么会这样做有一个模糊的想法,但我缺乏必要的知识(理论)来正确解释它

无论如何,我(认为)找到了一个正确的方法,我希望它能达到好的技术标准。我现在使用一个函数在dropzone init中填充一个作用域对象,以便
。on('sending')
(应该在插件回调之外)可以访问表单数据:

init: function() {

    var myDropzone = this,
        client = {};

    function getClientData(clientInfo, p_hash, c_hash) {
        client.clientInfo   = clientInfo;
        client.p_hash       = p_hash;
        client.c_hash       = c_hash;
        myDropzone.processQueue();
    };

    $('#register').formly(function(clientInfo, p_hash, c_hash) {

        getClientData(clientInfo, p_hash, c_hash);

    });

    myDropzone.on('sending', function(data, xhr, formData) {
        formData.append('client_info', JSON.stringify(client.clientInfo)),
        formData.append('particular', 0),
        formData.append('reg_pwd', client.p_hash),
        formData.append('confirm_pwd', client.c_hash)
    });

    myDropzone.on('success', function(file, response) {
        myDropzone.removeFile(file);
        console.log( 'Error: ' + response );
    })

}

我很乐意接受另一个解释原始代码行为的答案,并有更好的方法(如果有的话).

我的猜测是,第一次不起作用,因为您创建的事件监听器会触发您在函数中对表单的验证,该函数只在发送时调用,而这会在按下按钮之后发生。因此,第一次单击时没有事件监听器,这是在第一次单击时创建的,然后在su上工作b连续单击。我不明白,('sending')上的
中唯一的代码是我试图附加到图像的表单数据(这四行以
formData.append
开头。不过我不是javascript专家。我缺少什么?好吧,现在我明白了,dropzone只监听init内部的内容,而不监听函数的回调,这就是为什么第一次打开
('sending'))
在回调中,dropzone不知道,但第二次它“有点知道”…我的猜测是,第一次不起作用,因为您创建了事件侦听器,该事件侦听器在一个函数中触发窗体的验证,该函数只在发送时调用,而这发生在按下按钮之后。因此,当您第一次单击“没有事件侦听器”时,将在第一次单击时创建该事件侦听器,然后在SUB上工作频繁单击。我不明白,('sending')
上的
中唯一的代码是我试图附加到图像的表单数据(这四行以
formData.append
开头。不过我不是javascript专家。我缺少什么?好吧,现在我明白了,dropzone只监听init内部的内容,而不监听函数的回调,这就是为什么第一次打开
('sending'))
在回调中,dropzone不知道,但第二次它“有点知道”。。。