0

我有这个 URL 格式:

http://localhost/find_retailers/index.html?modelCode=ABCD1234

我有一个 XML 文件,其中包括:

<products>
<product modelcode="ABCD1234">
    <retailer id="1">
        <name>Retailer One</name>
        <logo>retailer_one.png</logo>
        <url>http://www.retailer-one.com/ABCD1234</url>
    </retailer>
</product>
<product modelcode="EFGH5678">
    <retailer id="2">
        <name>Retailer Two</name>
        <logo>retailer_two.png</logo>
        <url>http://www.retailer-two.com/EFGH5678</url>
    </retailer>
</product>

等等

我有以下jquery:

<script>
    $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "xml/retailers_param.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find('product').each(function(){
                    function getUrlVars() {
                        var vars = {};
                        var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
                        vars[key] = value;
                        });
                    return vars;
                    }
                    var productUrl = getUrlVars()["modelCode"];
                    var modelcode = $(this).attr('modelcode');
                        if(modelcode == productUrl) {

                            $(this).find('retailer').each(function(){
                            var id = $(this).attr('id');    
                            var name = $(this).find('name').text();
                            var logo = $(this).find('logo').text();
                            var url = $(this).find('url').text();
                            $('<div class="retailer" id="retailer_'+id+'"></div>').html('<h3>'+name+'</h3><p><img src="img/logo/'+logo+'" alt="'+name+'" class="logo"/></p><div class="btnVisit"><a href="'+url+'" class="btnStyle" target="_blank"><span>Visit Store</span></a></div>').appendTo('#retailers');
                            });


                        }
                        else {
                            $('<div class="noRetailer"></div>').html('<h3>No Retailers for:</h3></br>'+productUrl+'').appendTo('#retailers');
                        }
                });
            }
        });
    });
 </script>

问题是它为 XML 文件中的每个产品节点运行。这意味着它会显示产品以及 XML 文件中每个产品节点的错误消息。

我已经尝试return(false);在 else 语句中包含,但这不起作用,因为它停止通过第一个 XML 节点。

有任何想法吗?

如果我将 else 节点留空或将其删除,那么一切都很好,但出于 UX 原因,我真的想包含一个“没有零售商用于 'modelcode'”类型错误。

4

1 回答 1

1

您应该将错误测试移到外面each,使用布尔值来测试是否找到了产品。

        var foundProduct = false;
        $(xml).find('product').each(function(){
            function getUrlVars() {
                var vars = {};
                var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
                vars[key] = value;
                });
            return vars;
            }

            var productUrl = getUrlVars()["modelCode"];
            var modelcode = $(this).attr('modelcode');
                if(modelcode == productUrl) {
                    foundProduct = true;
                    $(this).find('retailer').each(function(){
                    var id = $(this).attr('id');    
                    var name = $(this).find('name').text();
                    var logo = $(this).find('logo').text();
                    var url = $(this).find('url').text();
                    $('<div class="retailer" id="retailer_'+id+'"></div>').html('<h3>'+name+'</h3><p><img src="img/logo/'+logo+'" alt="'+name+'" class="logo"/></p><div class="btnVisit"><a href="'+url+'" class="btnStyle" target="_blank"><span>Visit Store</span></a></div>').appendTo('#retailers');
                    });


                }
        });
        if(!foundProduct) { /* Your error code here */ }
于 2012-05-30T00:11:31.493 回答