Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
magento中的同步jquery ajax调用_Jquery_Ajax_Magento_Synchronous - Fatal编程技术网

magento中的同步jquery ajax调用

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){

我有一个表单,用户在其中输入账号,我需要在单击“保存”按钮时检查输入的账号是否唯一,但在提交表单之前。这在magento后端,ajax调用指向indexController中的函数acctnumAction

帐号的数量是动态的,最多可以有5个,但只有1个,所以我需要对这些项目执行一个each循环。我给了帐号字段它们自己的类,并循环了它

这就是我得到的

    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。这是个更好的名字。