0

JSON と YQL を使用して、外部ドメインから一部のデータにアクセスしています。

http://jsfiddle.net/NdkPU/22/

しかし、私が抱えている問題は、コードが断続的にしか機能しないことです。応答が返されることもあれば、何も返されないこともあります。

明らかに、これはこのデータにアクセスするための非常に遅い解決策です。そのため、タイムアウトしているか、コールバック関数に問題がある可能性があると考えた理由の 1 つです。

結果が常に機能しない理由はありますか?

// Start function when DOM has completely loaded 
    $(document).ready(function(){ 

  requestCrossDomain("http://api.fool.com/caps/ws/Ticker/GOOG/Pitches/10?apikey=rW3550aXdsuJPg4bKEemC13x39jDNR6f", function (result) {
    var num = 1;

    var browserName = navigator.appName;
    var doc;
    if (browserName == 'Microsoft Internet Explorer') {
        doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.async = 'false'
        doc.loadXML(result.results);
    } else {
        doc = (new DOMParser()).parseFromString(result.results, 'text/xml');
    }
    var xml = doc;

    console.log("Data Loaded: " + xml);
// Build an HTML string
myHTMLOutput = '';
 myHTMLOutput += '<table width="98%" border="1" cellpadding="0" cellspacing="0">';
  myHTMLOutput += '<th>Text</th>';

// Run the function for each student tag in the XML file
$('Pitch',xml).each(function(i) {
  PitchText = $(this).find("Text").text(); 

  // Build row HTML data and store in string
  mydata = BuildStudentHTML(PitchText);
  myHTMLOutput = myHTMLOutput + mydata;
});
myHTMLOutput += '</table>';

myHTMLOutput += '<br>Rating: ';

myHTMLOutput += $('Ticker',xml).attr("Percentile");

// Update the DIV called Content Area with the HTML string
$("#ContentArea").append(myHTMLOutput);
  });
});



 function BuildStudentHTML(PitchText){

  // Build HTML string and return
  output = '';
  output += '<tr>';
  output += '<td>'+ PitchText + '</td>';
  output += '</tr>';
  return output;
}


// Accepts a url and a callback function to run.
function requestCrossDomain(site, callback) {

// If no url was passed, exit.
if (!site) {
    alert('No site was passed.');
    return false;
}

// Take the provided url, and add it to a YQL query. Make sure you encode it!
var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?';

// Request that YSQL string, and run a callback function.
// Pass a defined function to prevent cache-busting.
$.getJSON(yql, cbFunc);

 function cbFunc(data) {
    // If we have something to work with...
    if (data.results[0]) {
        if (typeof callback === 'function') {
            callback(data);
        }
    }
    // Else, Maybe we requested a site that doesn't exist, and nothing returned.
    else throw new Error('Nothing returned from getJSON.');
}
}
4

1 に答える 1

0

ただの遅い API のようです。を使用してそのクエリの時間を計測する単純な bash ループを作成しcurlました。タイミングは次のとおりです。

 7.4 sec
11.1 sec
11.2 sec
 7.4 sec
11.1 sec
 7.3 sec
10.2 sec
11.8 sec
11.3 sec
 7.1 sec
于 2013-05-26T06:46:48.220 に答える