magento中的同步jquery ajax调用
我有一个表单,用户在其中输入账号,我需要在单击“保存”按钮时检查输入的账号是否唯一,但在提交表单之前。这在magento后端,ajax调用指向indexController中的函数acctnumAction 帐号的数量是动态的,最多可以有5个,但只有1个,所以我需要对这些项目执行一个each循环。我给了帐号字段它们自己的类,并循环了它 这就是我得到的magento中的同步jquery ajax调用,jquery,ajax,magento,synchronous,Jquery,Ajax,Magento,Synchronous,我有一个表单,用户在其中输入账号,我需要在单击“保存”按钮时检查输入的账号是否唯一,但在提交表单之前。这在magento后端,ajax调用指向indexController中的函数acctnumAction 帐号的数量是动态的,最多可以有5个,但只有1个,所以我需要对这些项目执行一个each循环。我给了帐号字段它们自己的类,并循环了它 这就是我得到的 function acctCheck(){ jQ.each(jQ(".acctnum"), function(x, y){
function acctCheck(){
jQ.each(jQ(".acctnum"), function(x, y){
var acct = jQ(this).val();
var field = this;
jQ.get("'.Mage::helper('core/url')->getHomeUrl().'dealerlocator/index/acctnum", {acctnum: acct}, function(data){
var items = JSON.parse(data);
if(items != ""){
$(field).addClass("validation-failed");
return false;
}
});
});
}
function saveAndContinueEdit(){
if(acctCheck() !== false){ editForm.submit(); }
}
单击save(保存)按钮可点击save(保存)和ContinuedIt(继续),并运行该功能以检查帐号
我知道这是行不通的,ajax将异步运行,在返回false之前不会返回任何内容,只要它不是false,它就会提交。但是我试着用$包装ajax调用。如果没有用,我用Save包装if,用$包装ContinuedIt
function saveAndContinueEdit(){
jQ("#continueEdit").val("1");
jQ.when(acctCheck()).done(function(valid){
if(valid !== false){
editForm.submit();
}
});
}
但这也没有起作用,甚至可能不是它应该起的作用,我只是在尝试我能想出的任何办法
在each中使用它的意义在于,如果账号无效,我可以将一个变量设置为false,但仍然会遍历其余的变量,这样,如果字段无效,该类仍然会被添加到字段中,因此用户将知道,而不是修复一个字段,然后另一个变量会弹出为无效,即使我的示例不是这样编码的。我知道get返回的数据是有效的,它只是不会同步运行
有人有什么想法吗?我用延迟的方式工作
function eachAcctChk(elem){
return jQ.get("'.Mage::helper('core/url')->getHomeUrl().'dealerlocator/index/acctnum", {account: jQ(elem).val(), dealer: '.$data["id"].'}, function(data){
if(data != "none"){
jQ(elem).addClass("validation-failed");
valid = false;
}
});
}
function saveAndChk(){
jQ("#continueEdit").val("0");
AcctChk();
}
function saveAndContinueChk(){
jQ("#continueEdit").val("1");
AcctChk();
}
function AcctChk(){
var deferreds = [];
jQ(".acctnum").each(function(){
deferreds.push(eachAcctChk(this));
});
jQ.when.apply(null, deferreds).then(function(){
if(valid){
editForm.submit();
} else {
valid = true;
alert("The highlighted dealer account numbers are already in use by another company. Unique account numbers are required.");
}
});
}
返回整个ajaxget调用作为延迟调用,我将它们全部放入一个数组中,并将其传递给when。因此,当所有ajax调用完成时,它就会点击,瞧。我使用延迟使它工作起来
function eachAcctChk(elem){
return jQ.get("'.Mage::helper('core/url')->getHomeUrl().'dealerlocator/index/acctnum", {account: jQ(elem).val(), dealer: '.$data["id"].'}, function(data){
if(data != "none"){
jQ(elem).addClass("validation-failed");
valid = false;
}
});
}
function saveAndChk(){
jQ("#continueEdit").val("0");
AcctChk();
}
function saveAndContinueChk(){
jQ("#continueEdit").val("1");
AcctChk();
}
function AcctChk(){
var deferreds = [];
jQ(".acctnum").each(function(){
deferreds.push(eachAcctChk(this));
});
jQ.when.apply(null, deferreds).then(function(){
if(valid){
editForm.submit();
} else {
valid = true;
alert("The highlighted dealer account numbers are already in use by another company. Unique account numbers are required.");
}
});
}
返回整个ajaxget调用作为延迟调用,我将它们全部放入一个数组中,并将其传递给when。因此,当所有的Ajax调用完成时,它就会命中,而VILLA。我没有时间完全回答,但是考虑使用流控制库。具有解决问题的能力;这有点像你想做什么。什么时候做。呵呵,也许我们应该把Frame重命名为$。when。这是一个更好的名字。我没有时间完全回答,但是考虑使用一个流控制库。具有解决问题的能力;这有点像你想做什么。什么时候做。呵呵,也许我们应该把Frame重命名为$。when。这是个更好的名字。