2011-12-22 7 views
0

YQLと一緒に遊んでいて、返された結果がJSONとして返されました。したがって、私はいくつかのJavaScriptを使用してそれを実行しようとしています。すべてうまく動作しますが、1つの要素についてはJavaScriptコードが壊れてしまいます。オブジェクトが存在しない場合、JavaScriptコードを中断しないでください。

これは私のJSONの一部です:

cbfunc({ 
    "query": { 
     "count": 30, 
     "created": "2011-12-22T20:48:45Z", 
     "lang": "en-US", 
      "diagnostics": { 
       "publiclyCallable": "true", 
       "url": { 
        "execution-start-time": "1", 
        "execution-stop-time": "2214", 
        "execution-time": "2213", 
        "proxy": "DEFAULT", 
        "content": "http://www.example.com" 
       }, 
       "user-time": "2254", 
       "service-time": "2213", 
       "build-version": "24402" 
      }, 
      "results": { 
       "li": [ 
        { 
         "class": "item", 
         "div": [ 
          { 
           "class": "onsale", 
           "p": { 
            "class": "product-image", 
            "a": { 
             "href": "http://www.example.com", 
             "title": "linktitle", 
             "img": { 
              "src": "http://www.example.com/image.jpg", 
             } 
            } 
           } 
          }, 
          { 
           "class": "price-box", 
           "span": { 
            "class": "normal-price", 
            "span": { 
             "class": "price", 
             "content": "900,-" 
            } 
           } 
          } 
         ], 
         "h5": { 
          "a": { 
           "href": "http://www.example.com", 
           "content": "Link content" 
          } 
         }, 
        }, 
        { 
         "class": "item", 
         "div": [ 
          { 
           "class": "onsale", 
           "p": { 
            "class": "product-image", 
            "a": { 
             "href": "http://www.example.com/2.html", 
             "title": "Link title", 
             "img": { 
              "src": "http://www.example.com/image2.jpg", 
             } 
            } 
           } 
          }, 
          { 
           "class": "price-box", 
           "span": { 
            "class": "normal-price", 
             "span": { 
              "class": "price", 
              "content": "812,-" 
             } 
            } 
           } 
          ], 
          "h5": { 
           "a": { 
            "href": "http://www.example.com/2.html", 
            "content": "Link 2 content" 
           } 
          }, 
         } 
etc. 

私は私が望むコンテンツをつかむために、JavaScriptの次のコードを使用しています。

function cbfunc(o){ 
    var items = o.query.results.li; 
    var output = ''; 
    var no_items=items.length; 
    for(var i=0;i<no_items;i++){ 
     var img = items[i].div[0].p.a.img.src; 
     var price1 = items[i].div[1]; 
     var price = price1.span.span.content; 
     var title = items[i].h5.a.content; 
     var link = items[i].h5.a.href; 
     var desc = items[i].description; 
     output += "<img src='" + img + "' /><h3><a href='" + link + "'>"+title+"</a></h3>" + price + "<hr/>"; 
    } 
    // Place product in div tag 
    document.getElementById('results').innerHTML = output; 
} 

あなたはおそらく私がliのすべてを実行している年代と私はそれぞれliプリントアウトしようとしているの画像、リンク、タイトルや価格を、見ることができるように。ほとんどすべてのものが動作しますが、各製品の価格を把握しようとするとJavaScriptが壊れます。私が見つけたのは、liのうちの1つか2つが、私が反復処理をしているのに、span.span.contentがなく、p.span.contentになっています。つまり、コードによってspan.span.contentが見つからないことがあり、コードが破損することがあります。

どうしてですか?これを壊さないために私ができることに対する解決策はありますか? span.span.contentなどがないアイテムにデフォルトのフォールバックを設定することはできますか?

答えて

2

、それはこのように下って来るのだが、これはちょうどそのシナリオ修正する理由に話すことができません:

var price = price1.span ? price1.span.span.content : price1.p.span.content; 

またはわずかによりコンパクト:

var price = (price1.span ? price1.span : price1.p).span.content; 

を、または他の種類があることができればあなたは回避し、より徹底する必要がしたいまたがる:

var price = price1.span && price1.span.span && price1.span.span.content ? price1.span.content : (price1.p && price1.p.span && price1.p.span.content ? price1.p.span.content : null); 

それともトンのうち、それを破ることができそれが見ても過言だ場合ernary:あなたは価格が未定義であることで大丈夫なら

var price; 

if (price1.span && price1.span.span && price1.span.span.content) { 
    price = price1.span.content; 
} else if (price1.p && price1.p.span && price1.p.span.content) { 
    price = price1.p.span.content; 
} else { 
    price = null; 
} 

最後に、あなたはこれで少し以上を短縮できます。

var price; 

if (price1.span && price1.span.span) { 
    price = price1.span.content; 
} else if (price1.p && price1.p.span) { 
    price = price1.p.span.content; 
} else { 
    price = null; 
} 
+0

パーフェクトジェドを!ありがとう、たくさんの仲間。 +1と正解。 –

関連する問題