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ファイル内のすべての製品ノードのエラーメッセージも表示することを意味します。

elseステートメントに含めようとreturn(false);しましたが、最初の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 に答える