2012-04-12 22 views
1

Ich führe eine AJAX-Abfrage auf einer externen Seite und versuche, nur die Daten aus der Grafschaft zurückgeben. Mein aktuelles Skript zieht den Text aus allen Tabellenzellen, aber ich kann es nicht für das Leben von mir bekommen, einfach den Kreisnamen zu ziehen.Verwenden von jQuery zum Abrufen von Text aus einer bestimmten

Das aktuelle Skript, das ausgeführt wird:

$(".zipCode").each(function(intIndex){ 
var zipCodeID = $(this).attr('id'); 
console.log('http://www.uscounties.org/cffiles_web/counties/zip_res.cfm?zip='+zipCodeID); 
$.ajax({ 
    url: 'http://www.uscounties.org/cffiles_web/counties/zip_res.cfm?zip='+zipCodeID, 
    type: 'GET', 
    success: function(res) { 
     var headline = $(res.responseText).find("p").text(); 
     console.log(headline); 
     $('#'+zipCodeID).empty(); 
     $('#'+zipCodeID).append(headline); 
    } 
}); 
}); 

Ein Beispiel für die Seite, die abgefragt wird: http://www.uscounties.org/cffiles_web/counties/zip_res.cfm?zip=56159

Dies sollte für alle eingegebenen ZIPS arbeiten. Das Seitenlayout ist das gleiche, ich kann einfach nicht die Funktion bekommen, nur die Grafschaft zurückzugeben. Jede Hilfe oder Beratung wäre großartig. Vielen Dank!

+0

In Ihren Ergebnissen erhalten Sie alles? Aufgrund der domainübergreifenden Ajax-Regeln würde ich mir nicht vorstellen, dass Sie etwas bekommen würden. Ich habe eine Route, wenn nicht, aber interessiert mich nur, wenn Sie etwas von Ihrem aktuellen Code bekommen können? –

+0

Ja, ich konnte den gesamten Text von der Seite mit meinem aktuellen Skript abrufen. – xxdrivenxx

Antwort

4

Mit dem vollständigen Fehlen von id s und class es auf dieser Seite, haben Sie nicht wirklich viel zu tun. Wenn Sie Zugriff auf die Quelle dieser Seite haben, stecken Sie eine id oder class auf die Zelle und machen Sie Ihr Leben so viel einfacher. Wenn nicht, müssen Sie das verwenden, was Sie über die Struktur der Seiten wissen, um die Grafschaft zu finden. So etwas funktioniert nur auf der einen Seite, mit der Sie verbunden sind. Wenn andere Seiten leichte Abweichungen haben dies fehlschlagen:

var headline = $(res.responseText).find("table > tr:eq(2) > td:eq(3)").text(); 

Dies setzt voraus, dass es immer nur eine Tabelle auf der Seite ist und dass der Landkreis ist immer in der dritten Zelle der zweiten Reihe.

+0

Danke! Das war alles was ich brauchte. Einfach und funktioniert hervorragend für das einmalige Skript, das ich zum Arbeiten brauchte. – xxdrivenxx

+0

Zu meiner Notiz unten ... Beachten Sie, dass eine Postleitzahl mehrere Landkreise enthalten kann. Wenn das für Sie wichtig ist, sollten Sie das berücksichtigen. –

0

Sie sind im Grunde Screen Scraping. Ich denke irgendwie, dass Sie Probleme mit dieser Domain haben werden, und zwar aufgrund von Domains und anderen Dingen, aber das ist eine Nebenfrage zu dieser Frage.

Sie müssen durch die resultierende Seite gehen. Unter der Annahme, da immer nur eine Seite auf dem Bildschirm ist, wird es wie etwas aussieht diese:

var retVal = []; 

// Basically, for each row in the table... 
$('tr').each(function(){ 
    var pTR = $(this); 

    // Skip the header row. 
    if (pTR.find('th').length == 0) 
    { 
     // This is the array of TDs in the given row. 
     var pCells = $('td', pTR); 
     retVal.push({state:$(pCells[0]).text(), place:$(pCells[1]).text(), county:$(pCells[2]).text()}); 
    } 
}); 
// retVal now contains an array of objects, including county. 
if (retVal.length > 0) 
{ 
    alert(retVal[0].county); 
} 
else 
{ 
    alert('Cannot parse output page'); 
} 

Der Parsing-Code geschrieben ist erweiterbar zu sein, damit Sie sich wieder alle Daten. Mit Postleitzahlen, obwohl Sie wahrscheinlich nur eine Grafschaft zurückbekommen werden, werden Sie definitiv mehr Plätze zurückbekommen. Beachten Sie auch, dass nicht jede Postleitzahl aus verschiedenen Gründen eine Grafschaft hat, aber Sie sollten in diesem Fall eine leere Zeichenfolge zurückgeben.

Verwandte Themen