2010-04-26 21 views
8

estoy haciendo la llamada utilizando el siguiente script que se llama el clic de una etiqueta de anclagetJSON devolución de llamada no disparar

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

En la aplicación de servidor que reciba la llamada, así que sé que es una URL válida, pero la devolución de llamada no se invoca. Si configuro el código jquery (f11/f10) la devolución de llamada se llama ?? !!!?

servidor devuelve los resultados de la aplicación MVC en forma de una clase

// 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; 
} 

Cuando tengo acceso a través de la URL del navegador resultado =

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

Respuesta

3

Una apuesta probable es que no se está volviendo válida JSON. Los documentos de jQuery indican que, "A partir de jQuery 1.4, si el archivo JSON contiene un error de sintaxis, la solicitud generalmente fallará silenciosamente". ¿El texto JSON que está publicando pasa JSON Lint? También es posible que desee cambiar (al menos temporalmente) al jQuery.ajax. Permite un mayor manejo de errores. Algo así como:

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

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

Hay una coma que falta '' después de la devolución de llamada de error. – Ralphleon

+1

http://www.jsoneditoronline.org/ puede ser una herramienta útil en línea para detectar errores. Solo pega el json allí en el lado izquierdo. –

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.

Por lo tanto, es su JSON válida?

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

¿Qué significa el resultado anterior? (Suponiendo que su navegador tiene un console.)

21

Si el resultado no es exitoso, esa devolución de llamada no se activará, esto generalmente se debe a que se devuelve un JSON no válido. Para darle una prueba, puede utilizar la forma larga de $.getJSON, como este para que pueda ver el error:

$.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 se trata de un error de JSON/analizador, puede tomar su respuesta y ver lo que está mal JSONLint, aquí: http://www.jsonlint.com/

+0

No hay error del Analizador JSON –

+0

@Marty - ¿Qué error * estás * obteniendo ... está ahí por una razón, siempre publícalo. –

+0

No obtengo un error. Está fallando silenciosamente. json resultado = {"token": "c877453e-739d-4883-9310-91ddd707d6af"} –

0

¿Está llamando a preventDefault() o devuelve falso en el controlador de clic del ancla?

0

Usted necesita señalizar para permitir JSONGets en su acción del controlador cuando se llama al método de serialización JSON:

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