2010-04-26 6 views
8

Je fais l'appel à l'aide du script suivant qui est appelé clic d'une balise d'ancragerappel getJSON pas de tir

function GetToken(videoId) { 
     debugger; 
     var json = $.getJSON("/Vod/RequestAccessToken/"+videoId, function(result){ 
      alert("token recieved: " + result.token); 
     }); 
    } 

Dans l'application serveur, je reçois l'appel Je sais donc c'est une URL valide, mais le rappel n'est pas invoqué. Si je définis par le code jquery (f11/f10) le rappel est appelé ?? !!!?

serveur renvoie les résultats de l'application MVC sous la forme d'une classe

// function called 
public JsonResult RequestAccessToken(int id) 
{ 
    Token t = new Token(); 
    t.MasterId = Guid.NewGuid(); 
    var result = new TokenResult(t.MasterId); 
    return this.Json(result, JsonRequestBehavior.AllowGet); 
} 

// class returned 
public class TokenResult 
{ 
    public TokenResult() { } 
    public TokenResult(Guid g) { token = g.ToString(); } 
    public string token = null; 
} 

Quand j'accéder à l'URL par résultat du navigateur =

{ 
    "token":"c877453e-739d-4883-9310-91ddd707d6af" 
} 

Répondre

3

Un pari probable est que vous ne retournez pas valide JSON. Les docs de jQuery notent que, "à partir de jQuery 1.4, si le fichier JSON contient une erreur de syntaxe, la requête échouera généralement silencieusement." Le texte JSON que vous diffusez passe-t-il le JSON Lint? Vous pouvez également passer (au moins temporairement) à jQuery.ajax. Cela permet plus de gestion des erreurs. Quelque chose comme:

$.ajax({ 
    url: "/Vod/RequestAccessToken/"+videoId, 
    dataType: 'json', 
    error: function(xhr, textStatus, errorThrown){ 

     }, 
    success: function(result){ 
      alert("token recieved: " + result.token); 
     } 
}); 
+1

Il y a une virgule manquante « » après le rappel d'erreur. – Ralphleon

+1

http://www.jsoneditoronline.org/ peut être un outil en ligne utile pour détecter les erreurs. Collez simplement le JSON sur le côté gauche. –

2

De jQuery de documentation:

Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently.

Alors, est votre JSON valide?

function GetToken(videoId) { 
    debugger; 
    console.log('getting it'); 
    var json = $.get("/Vod/RequestAccessToken/"+videoId, function(result){ 
     console.log('got it'); 
    }); 
} 

Qu'est-ce que la sortie ci-dessus? (En supposant que votre navigateur dispose d'un console.)

21

Si votre résultat n'aboutit pas, ce rappel ne se déclenchera pas, cela est généralement dû au retour de JSON non valide. Pour lui donner un test, vous pouvez utiliser la forme longue de $.getJSON, comme celui-ci de sorte que vous pouvez voir l'erreur:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    success: function(result){ 
    alert("token recieved: " + result.token); 
    }, 
    error: function(request, textStatus, errorThrown) { 
    alert(textStatus); 
    }, 
    complete: function(request, textStatus) { //for additional info 
    alert(request.responseText); 
    alert(textStatus); 
    } 
}); 

Si c'est une erreur JSON/analyseur, vous pouvez prendre votre réponse et voir ce qui ne va pas avec JSONLint, ici: http://www.jsonlint.com/

+0

Aucune erreur JSON Parser –

+0

@Marty - Quelle erreur * vous * obtenez * il est là pour une raison, toujours le poster. –

+0

Je ne reçois pas d'erreur. Il échoue silencieusement. json result = {"jeton": "c877453e-739d-4883-9310-91ddd707d6af"} –

0

Appelez-vous preventDefault() ou renvoyez false dans le gestionnaire de clic de l'ancre?

0

Vous devez signaler pour permettre JSONGets dans votre action de commande lorsque vous appelez la méthode sérialisation JSON:

public JsonResult ActionDateClicked(ActionViewModel vm) 
     { 
      vm.Model.Observation = "Changed"; 
      return Json(vm, JsonRequestBehavior.AllowGet); 
     } 
Questions connexes