次のフィードを使用します。
http://api.Twitter.com/1/statuses/user_timeline.json?screen_name=Microsoft&include_rts=1&count=1
これをループして、htmlページに表示したい詳細を取得することができます。
ただし、retweeted_status.user.profile_image_url
存在しますが、その方法がわかりませんか?
現在、jquery-ajaxによってdata
が返されるデータをループしています。
data[i].retweeted_status.user.profile_image_url
if data[i].retweeted_status.user.profile_image_url
が存在せず、nullまたは未定義を返さないため、次のエラーが発生します。
cannot read property 'user' of undefined
このエラーメッセージは、data [i]またはretweeted_statusのいずれかが未定義であることを示しています。これは、jsonを取得するための呼び出しが失敗している可能性が高いことを意味します。 Twitterからデータが返されると、プロフィール画像のURLが表示されます。これは、アップロードされていない人には卵のような画像が表示されるためです。これをforループの前に置く必要があります。
if (typeof(retweeted_status) != "undefined")
{
//code for what to do with json here
}
私はそれが良い答えだと思います:
if('key' in myObj)
if (something !== undefined) {
...
}
...またはさらに良い:
if (typeof something != "undefined") {
...
}
ネストオブジェクトをループしてアクセスしている場合:
if(!data)
return;
while(data.length)
{
var Tweet_data = data.shift();
/* do some work */
if(!Tweet_data|| !Tweet_data.retweeted_status)
continue;
var retweeted_status = Tweet_data.retweeted_status;
/* do your other work */
}
このループでは、配列インデックスを使用する必要がなくなりました。これは、何かのインデックスが特に必要でない限り、最も効率的ではありません。代わりに、最初の要素を配列からポップし、そのオブジェクトを直接使用します。ループ内部は、Tweet_data
のプロパティの存在を確認できます。
2つの理由(objA.child.property
など)のために、複数レベルの間接参照の使用を避けようとしています。1)オブジェクトの存在を最初から確認でき、存在しない場合は、ジャンプしてデフォルト値を割り当てることができます。 。 2)JavaScriptがメソッドproperty
にアクセスする必要があるたびに、最初にchild
を使用してobjA
を見つけ、次にproperty
にアクセスする必要があります。大きなループでは遅くなる可能性があります。
あなたができるもう一つのことは、私のために働いています:
if(retweeted_status) {
// your code
}
$。grep() を見てください。 JSONオブジェクトをループするのに役立ちます。あなたが提供したリンクでそれを使用しました。ツイートをループして、リツイートされたユーザー画像を見つけるために使用しました。ここで私のコードを見ることができます: http://jsfiddle.net/q5sqU/7/