2010-12-14 84 views
0

J'essaye de construire une entrée jQuery autocomplete. J'ai un formulaire qui contient une entrée, et je veux que l'autocomplétion fonctionne avec l'API de Yelp pour compléter automatiquement les noms des restaurants. quand je lance la page et tapez quoi que ce soit dans la zone de texte d'entrée, rien ne se passeQuel est le problème avec mon code JS/jQuery?

voici mon code:

<html> 
<body> 
<input id="restaurantSearch" /> 

<pre> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript" src="http://oauth.googlecode.com/svn/code/javascript/oauth.js"></script> 
<script type="text/javascript" src="http://oauth.googlecode.com/svn/code/javascript/sha1.js"></script> 
<script type="text/javascript" src="https://github.com/jamespadolsey/prettyPrint.js/raw/master/prettyprint.js"></script> 

<script> 
$(document.ready(function() { 
    $('#restaurantSearch').autocomplete({ 
    alert(req); 
     source: function(req, add){ 



    var auth = { 
    // 
    // Update with your auth tokens 
    // 
    consumerKey: "xxx", 
    consumerSecret: "xxx", 
    accessToken: "xxx-xxx", 
    accessTokenSecret: "xxx", 
    serviceProvider: { 
    signatureMethod: "HMAC-SHA1" 
    } 
}; 

var terms = req; 
var near = 'San+Francisco'; 

var accessor = { 
    consumerSecret: auth.consumerSecret, 
    tokenSecret: auth.accessTokenSecret 
}; 

parameters = []; 
parameters.push(['term', terms]); 
parameters.push(['location', near]); 
parameters.push(['callback', 'cb']); 
parameters.push(['oauth_consumer_key', auth.consumerKey]); 
parameters.push(['oauth_consumer_secret', auth.consumerSecret]); 
parameters.push(['oauth_token', auth.accessToken]); 
parameters.push(['oauth_signature_method', 'HMAC-SHA1']); 

var message = { 
    'action': 'http://api.yelp.com/v2/search', 
    'method': 'GET', 
    'parameters': parameters 
}; 

OAuth.setTimestampAndNonce(message); 
OAuth.SignatureMethod.sign(message, accessor); 

var parameterMap = OAuth.getParameterMap(message.parameters); 
console.log(parameterMap); 

$.ajax({ 
    'url': message.action, 
    'data': parameterMap, 
    'dataType': 'jsonp', 
    'jsonpCallback': 'cb', 
    'success': function(data, textStats, XMLHttpRequest) { 
    console.log(data); 
    var output = prettyPrint(data); 
    $("body").append(output); 
    } 
}); 

}); 
</script> 
</body> 
</html> 

'

+1

Avez-vous essayé d'utiliser FireBug pour résoudre le problème? –

Répondre

0

Je n'ai pas essayé ce code, puisque je n'ai pas un compte Yelp (donc pas de jetons auth), mais je vois immédiatement quelques problèmes dans votre code. D'une part, la saisie semi-automatique n'est pas une fonction jQuery, mais plutôt une fonction jQuery-ui. Vous devez inclure le javascript jQuery-ui.

Ensuite, il existe de nombreuses erreurs de code que toute console de navigation aurait dû attirer votre attention. Par exemple, l'alerte (req); à l'intérieur de l'appel de saisie semi-automatique est faux pour quelques raisons ... pour une chose, vous appelez autocomplete avec un paramètre de hachage, qui est la façon dont vous définissez les propriétés. Par conséquent, vous ne pouvez pas mettre des appels de fonction là-dedans comme ça. Regardez la façon dont la propriété source du hachage est définie - sous la forme: attributeName: value

De même, même si ce code était légal à placer là, req n'avait même pas encore été défini. Il semble que vous n'ayez pas un certain nombre d'accolades d'extrémité correspondantes, mais je peux me tromper à ce sujet - il ne fait jamais de mal à indenter le code entre accolades de sorte que vous pouvez facilement aligner les accolades correspondantes visuellement.

Il semble que vous utilisiez au moins un des outils de développement des navigateurs (Firebug, mode développeur webkit, etc) ... du moins c'est ce que je devine depuis que vous avez utilisé console.log() dans votre rappel ajax. En supposant que c'est le cas, votre console devrait vous dire qu'il y a des erreurs dans votre code. Comme pour le commentaire ci-dessus sur Ajax inter-domaines, c'est simplement incorrect ... JSONP avec un rappel est une technique qui contourne les restrictions inter-domaines, et est supporté dans au moins jQuery 1.4. Donc, je ne pense pas que votre problème soit cette partie de votre code.

Bonne chance.

+0

merci pour la réponse! Je vérifierai. encore une fois, je suis nouveau au développement web. Ill intall FireBug et essayez de déboguer la page. pouvez-vous recommander un bon livre/tutoriel qui me permettra d'être opérationnel grâce à des technologies issues du développement de Windows? – Ron

+0

Voyons voir. Tout d'abord, Firebug est très important, alors assurez-vous de l'installer. Comme pour les tutoriels ... une partie importante de la compréhension de jQuery nécessite de comprendre la syntaxe du sélecteur CSS. Juste en passant par les tutoriels http: //jquery.com devrait être un grand pas. Si vous voulez toujours que la saisie semi-automatique fonctionne, vous pouvez également consulter les tutoriels http://jquery-ui.com (chaque widget/contrôle a plusieurs exemples qui montrent de nombreuses options/fonctionnalités de chaque widget/contrôle. assez facile à suivre, et les exemples concis et précis. – btx