2010-10-22 14 views
15

J'ai besoin de demander une recherche twitter avec jquery en utilisant api twitter. Après avoir lu documentation Je vous écris ce code:twitter recherche api avec erreur jquery

$.getJSON("http://search.twitter.com/search.json?callback=myFunction&q=stackoverflow"); 

    function myFunction(r) { 
     console.log(r); 
    } 

search.json Impossible de charger la ressource> Lorsque la page est exécutée, Google Chrome affiche cette erreur sur la console:

XMLHttpRequest ne peut pas charger http://search.twitter.com/search.json?callback=myFunction&q=stackoverflow. Origine http://localhost/twitter n'est pas autorisé par Access-Control-Allow-Origin. search.json Impossible de charger la ressource

Quel est le problème?

Répondre

30

Vous devez écrire un peu différemment, comme ceci:

$.getJSON("http://search.twitter.com/search.json?callback=?&q=stackoverflow", 
    function (r) { 
    console.log(r); 
}); 

Pour déclencher JSONP il cherche explicitementcallback=?, ce qui est dans votre version de fonction nommée. Pour utiliser la fonction de rappel du nom, vous êtes mieux d'aller avec la $.ajax() version complète:

$.ajax({ 
    url: "http://search.twitter.com/search.json?q=stackoverflow", 
    dataType: "jsonp", 
    jsonpCallback: "myFunction" 
}); 

function myFunction(r) { console.log(r); } 
+0

ça marche .... merci beaucoup !!! – rizidoro

+0

@rizidoro - bienvenue :) –

+1

J'aimerais que quelqu'un documente cela plus correctement, j'ai passé une heure à essayer de comprendre pourquoi je reçois un accès refusé! – Ayyash

3

Juste pour ajouter un peu plus à la réponse que vous pouvez utiliser le code suivant pour afficher du texte dans chaque tweet retourné.

$.getJSON("http://search.twitter.com/search.json?callback=?&q=stackoverflow", 

function(data){ 

for (i=0; i<data.results.length; i++){ 

$("#tweets").append("<p><strong>Text: </strong>" + data.results[i].text + "<BR/>" + "<p><strong>Created at: </strong>" + data.results[i].created_at +"</p><br /><br />"); 

} 
}); 

Ensuite, au sein de votre html corps mettre la div suivante

<div id="tweets"></div>