dropzone - var this not working (xhr formdata) inside another function's callback 第一次点击
dropzone - var this not working (xhr formdata) inside another function's callback the first click
我有一个带有 dropzone 的注册表单,我想使用插件验证它(字段)。我在 dropzone init 和它的函数回调中调用这个插件,我处理 dropzone 队列并附加表单数据。
问题是,我第一次点击 <a id="click">Send</a>
按钮时,没有任何反应:它只是进入函数的回调并且什么都不做(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 );
这是空降区初始化:
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 请求)发送到服务器。
我第二次点击 "Send" 它确实起作用了(它发送了 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 的注册表单,我想使用插件验证它(字段)。我在 dropzone init 和它的函数回调中调用这个插件,我处理 dropzone 队列并附加表单数据。
问题是,我第一次点击 <a id="click">Send</a>
按钮时,没有任何反应:它只是进入函数的回调并且什么都不做(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 );
这是空降区初始化:
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 请求)发送到服务器。
我第二次点击 "Send" 它确实起作用了(它发送了 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 );
})
}
我很乐意接受另一个解释原始代码行为的答案,并有更好的方法(如果有的话)。