2010-04-26 23 views
8

sto facendo la chiamata utilizzando il seguente script che è chiamato al clic di un tag di ancoraggiogetJSON richiamata non sparare

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

In applicazione server che ricevo la chiamata in modo so che è un URL valido, ma la richiamata non viene invocata. Se ho impostato il codice jquery (f11/f10), il callback è chiamato ?? !!!?

restituisce i risultati del server di applicazione MVC in forma di una 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; 
} 

Quando accedo tramite l'url risultato browser =

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

risposta

3

Una scommessa probabile è che non si sta tornando valida JSON. I documenti di jQuery notano che, "A partire da jQuery 1.4, se il file JSON contiene un errore di sintassi, la richiesta di solito fallisce silenziosamente." Il testo JSON che stai servendo supera lo JSON Lint? Si consiglia inoltre di passare (almeno temporaneamente) a jQuery.ajax. Permette una maggiore gestione degli errori. Qualcosa di simile:

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

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

C'è una virgola mancante '' dopo la richiamata errore. – Ralphleon

+1

http://www.jsoneditoronline.org/ può essere utile strumento online per individuare errori. Basta incollare il json lì sul lato sinistro. –

2

Da jQuery di documentation:

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

Quindi, è il tuo JSON valida?

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

Che cosa produce l'uscita sopra? (Supponendo che il tuo browser abbia un console.)

21

Se il tuo risultato non va a buon fine, quella richiamata non sparirà, questo di solito è dovuto al ritorno di JSON non valido. Per dargli una prova, è possibile utilizzare la forma lunga di $.getJSON, come questo in modo da poter vedere l'errore:

$.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); 
    } 
}); 

Se si tratta di un errore di JSON/parser, si può prendere la vostra risposta e vedere che cosa c'è di sbagliato con JSONLint, qui: http://www.jsonlint.com/

+0

No Errore Parser JSON –

+0

@Marty - Che errore * si sta * ottenendo ... è lì per un motivo, pubblicarlo sempre. –

+0

Non ricevo un errore. Sta fallendo silenziosamente. json result = {"token": "c877453e-739d-4883-9310-91ddd707d6af"} –

0

Stai chiamando preventDefault() o restituendo false nel gestore di clic dell'ancora?

0

È necessario segnalare per permettere JSONGets nella vostra azione di controllo quando si chiama il metodo di serializzazione JSON:

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