jQuery.ajax() parsererror
lorsque j'essaie d'obtenir le JSON de http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&sortie=json avec:
(jQuery 1.6.2)
$.ajax({
type: "GET",
url: url,
dataType: "jsonp",
success: function (result) {
alert("SUCCESS!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.statusText);
alert(xhr.responseText);
alert(xhr.status);
alert(thrownError);
}
});
J'obtiens: parsererror; 200; undefined; jquery162******************** was not called
mais avec le JSON de http://search.twitter.com/search.json?q=beethoven&callback=?&count=5 fonctionne très bien.
Les deux sont JSON valide formats. Alors, quelle est cette erreur?
[Mise à JOUR]
@3ngima, j'ai mis en œuvre cette asp.net il fonctionne très bien:
$.ajax({
type: "POST",
url: "WebService.asmx/GetTestData",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert(result.d);
}
});
WebService.asmx:
[WebMethod]
public string GetTestData()
{
try
{
var req = System.Net.HttpWebRequest.Create("http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&output=json");
using (var resp = req.GetResponse())
using (var stream = resp.GetResponseStream())
using (var reader = new System.IO.StreamReader(stream))
return reader.ReadToEnd();
}
catch (Exception) { return null; }
}
- Vous pouvez consulter stackoverflow.com/a/29485687/3126639. Async: false est important.
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous avez dit jQuery que vous attendez de la JSON-P, pas JSON, le dos. Mais le retour est JSON. JSON-P est horriblement mal nommé, nommé d'une manière qui ne provoque pas la fin de la confusion. C'est un convention pour transmettre des données à une fonction via un
script
tag. En revanche, JSON est un format de données.Exemple JSON:
Exemple de JSON-P:
JSON-P fonctionne parce que JSON est un sous-ensemble de JavaScript littérale de la notation. JSON-P n'est rien de plus qu'une promesse que si vous dites que le service que vous avez demandé que le nom de la fonction de retour d'appel (généralement en mettant un
callback
paramètre dans la requête), la réponse doit être dans la forme defunctionname(data)
, oùdata
sera "JSON" (ou plus généralement, un JavaScript littérale, qui peut ne pas être le assez la même chose). Vous êtes censé utiliser un JSON-P de l'URL dans unescript
de la balisesrc
(jQuery qui le fait pour vous), pour contourner la Même La Politique De L'Origine qui empêche les requêtes ajax à partir de la demande de données d'origines autres que le document qu'ils proviennent (sauf si le serveur prend en charge De la SCRO et votre navigateur n'ainsi).api-v3.deezer.com
, en raison de la SOP (voir le lien dans la réponse).dans le cas où le serveur ne prend pas en charge la
cross domain
demande, vous pouvez:json
du service, eten php, vous pouvez le faire comme ceci
proxy.php contient le code suivant
et vous ne la requête ajax pour vous proxy comme ce
essayé et testé, je reçois la réponse json de retour...
Enfin j'ai trouvé la solution. Tout d'abord, la webmethods dans un service web ou une page ne fonctionne pas pour moi, elle renvoie toujours xml, en local fonctionne très bien mais dans un fournisseur de service comme godaddy il ne le fait pas.
Ma solution a été de créer un
.ahsx
, un gestionnaire de .net et envelopper le contenu avec jquery fonction de callback qui passent le jsonp, et il fonctionne .Et voici l'appel à jquery:
et fonctionne parfaitement
Gabriel