2010-05-14 8 views
1

en utilisant comme guide: http://msdn.microsoft.com/en-us/library/dd250846.aspxdemande jsonp en utilisant jquery chercher les résultats web bing

quelqu'un peut me aider à l'appel jquery? Est-ce que je passe réellement le code javascript pour le rappel, ou juste le nom de la fonction?

BingSearch = function($bingUrl, $bingAppID, $keyword, $callBack) { 

     $bingUrl = $bingUrl + "?JsonType=callback&JsonCallback=" + $callBack + "&Appid=" +     $bingAppID + "&query=" + encodeURI($keyword) + "&sources=web"; 


$.ajax({ 
      dataType: 'jsonp', 
      jsonp: $callBack, 
      url: $bingUrl, 
      success: function(data) { 
       alert('success'); 
       $callBack(data); 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 
       alert("error: " + textStatus); 
      } 
     }); 

}; 

Mise à jour

Ok, donc je l'ai changé cela:

BingSearch = function(bingUrl, bingAppID, keyword, callback) { 

    var url = bingUrl + "?method=?&JsonType=callback&Appid=" + bingAppID + "&query=" + encodeURI(keyword) + "&sources=web"; 

    $.getJSON(url, callback); 

}; 

L'appeler comme:

BingSearch(url, appid, searchkeyword, function(searchresults) { 

    alert('yes!'); 
}; 

obtenir toujours l'erreur 'label non valide'.

Répondre

4

Pour utiliser jsonp avec jQuery, remplacez JsonCallback=UserCallback par JsonCallback=?. jQuery le traitera ensuite comme une demande régulière de $ .ajax().

Je suggère de commencer avec $.getJSON() pour vous habituer à l'API Bing et de revenir à $.ajax() lorsque vous êtes prêt à l'intégrer avec votre application.

En utilisant l'exemple de la Bing API docs:

var apikey = 'YOUR_API_KEY'; 
var url = 'http://api.bing.net/json.aspx?AppId='+apikey+'&Version=2.2&Market=en-US&Query=testign&Sources=web+spell&Web.Count=1&JsonType=callback&JsonCallback=?'; 
$.getJSON(url, function(data) { console.log(data); }); 
+0

+10000000000000000 merci un paquet! – Blankman

+0

Vous pariez. S'amuser. – dshaw

1

jsonp: doit être définie sur une chaîne (je pense qu'elle peut également être omise), car il s'agit juste du nom de la fonction créée dynamiquement utilisée pour recevoir le JSONP.

Mais le callback formel paramètre $ doit être une référence à une fonction, donc soit vous utilisez

function callback(result){ /*processResultHere*/ } 

BingSearch(..,..,.., callback); 

ou

BingSearch..,..,.., function(result){ /*processResultHere*/ }); 

Et juste pour que vous le savez, l'usage excessif de $ me fait vraiment mal aux yeux :)

De même, les noms de fonction commençant par une majuscule doivent être réservés aux 'classes', car beaucoup de vérificateurs de syntaxe vont se plaindre des fonctions avec des majuscules appelées sans new à l'avant ..

+0

-1, pas assez jquery (pas vraiment) – Malfist

+0

Oui $ callBack est une référence à une fonction (fonction anonyme comme vous présenté dans votre 2ème extrait de code). toujours obtenir une erreur 'label invalide', il dit 'label invalide' qui crache la réponse json de bing (dans firebug) – Blankman

+0

Mais avez-vous modifié votre propriété 'jsonp:'? Dans votre code, vous l'avez défini sur une référence de fonction alors qu'il doit être défini sur une chaîne. –

Questions connexes