Juan Pablo Gomez
Juan Pablo Gomez

Reputation: 5524

jquery $.getjSON don't reach to callbackfunction

I'm trying to proccess a jSON request, the url used in getJSON is

http://localhost:52563/Documentos/Docs/CondicionesMostrar?NumIdTransaccion=16091&NumIdConcepto=421. 

The text returned by my partialview using this:

string ljListaItems = Json.Encode(loListaItems).ToString();
@ljListaItems

it return this data

    [{"MedidasRelativas":false,"CssClass":"ParadigmaNTouchItem","CssClassAlterna":"ParadigmaNTouchItemAlterno","CssClassImage":"","CssClassTitle":"","CssClassFlag":"","ajaxRegion":"DetalleCondiciones","ajaxAction":"onclick=\"/Documentos/Docs/CondicionesAgregar?NumIdtransaccion=16090&IntIdCondicion=1&status=False\"","ajaxActionIzq":"","ajaxEnabled":true,"ajaxMethod":0,"ajaxMode":0,"ajaxRegionLoading":"#trabajando","ajaxData":"","image":"","editarCantidad":false,"cantidad":0,"useCssAlterno":false,"id":"I_Cond_1","title":"sin pulpo","flag":null,"width":0,"height":0,"top":0,"left":0},{"MedidasRelativas":false,"CssClass":"ParadigmaNTouchItem","CssClassAlterna":"ParadigmaNTouchItemAlterno","CssClassImage":"","CssClassTitle":"","CssClassFlag":"","ajaxRegion":"DetalleCondiciones","ajaxAction":"onclick=\"/Documentos/Docs/CondicionesAgregar?NumIdtransaccion=16090&IntIdCondicion=2&status=False\"","ajaxActionIzq":"","ajaxEnabled":true,"ajaxMethod":0,"ajaxMode":0,"ajaxRegionLoading":"#trabajando","ajaxData":"","image":"","editarCantidad":false,"cantidad":0,"useCssAlterno":false,"id":"I_Cond_2","title":"sin salami","flag":null,"width":0,"height":0,"top":0,"left":0}]

That is a representation of this class:

public class RootObject
{
 public bool MedidasRelativas { get; set; }
 public string CssClass { get; set; }
 public string CssClassAlterna { get; set; }
 public string CssClassImage { get; set; }
 public string CssClassTitle { get; set; }
 public string CssClassFlag { get; set; }
 public string ajaxRegion { get; set; }
 public string ajaxAction { get; set; }
 public string ajaxActionIzq { get; set; }
 public bool ajaxEnabled { get; set; }
 public int ajaxMethod { get; set; }
 public int ajaxMode { get; set; }
 public string ajaxRegionLoading { get; set; }
 public string ajaxData { get; set; }
 public string image { get; set; }
 public bool editarCantidad { get; set; }
 public int cantidad { get; set; }
 public bool useCssAlterno { get; set; }
 public string id { get; set; }
 public string title { get; set; }
 public object flag { get; set; }
 public int width { get; set; }
 public int height { get; set; }
 public int top { get; set; }
 public int left { get; set; }
}

Note: This class was generated at http://json2csharp.com/ My jquery code is this:

function actualizarCondiciones(tcLink) {
 $.getJSON(tcLink, function (condiciones) {
     alert(condiciones); //It never reach.
     $.each(condiciones, function (key, val) {
         alert(val);
     });
 });
}

The problem is that callback function never reach.

Upvotes: 0

Views: 184

Answers (2)

andres descalzo
andres descalzo

Reputation: 14967

In chat you included this code:

public ActionResult CondicionesMostrar(decimal NumIdTransaccion , decimal NumIdConcepto) 
{ 
    // Se verifica si la session de usuario ya tiene cargada una Id de Transaccion 
    VerificarTransaccion(NumIdTransaccion); 

    //Se seleccionan el item, este ya tiene relacionado el grupo y las condiciones del mismo 
    var item = from i in db.Merlin_ConceptosFacturacion 
    where i.NumIdConcepto == NumIdConcepto 
    select i ; 

    // Se verifica si ya se han agregado algunas condiciones 
    var condiciones = from c in db.Merlin_BR_Condiciones_x_Pedido 
    where c.NumIdTransaccion == NumIdTransaccion 
    select c; 

    ViewBag.condiciones = condiciones.ToList(); 

    return View(item.First()); 
}

But you should return a json type, as this:

public JsonResult CondicionesMostrar(decimal NumIdTransaccion , decimal NumIdConcepto) 
{ 
    ...
    return Json(item.First()); 
}

To test this you can write the following code:

public JsonResult CondicionesMostrar(int numIdTransaccion, int numIdConcepto) 
{ 
    return Json(new {NumIdTransaccion = numIdTransaccion, NumIdConcepto = numIdConcepto}); 
}

And in javascript:

function actualizarCondiciones(tcLink) {
 $.getJSON(tcLink, function (condiciones) {
     console.log(condiciones); // depending on the browser you use, there might not "console.log"
     $.each(condiciones, function (key, val) {
         console.log(key, val);
     });
 }).fail(function() {
     console.log('error', arguments);
 });
}

UPDATE for request with GET method:

public JsonResult CondicionesMostrar(int numIdTransaccion, int numIdConcepto) 
{ 
    return Json(
          new {NumIdTransaccion = numIdTransaccion, NumIdConcepto = numIdConcepto}
          ,JsonRequestBehavior.AllowGet
    ); 
}

Upvotes: 1

J0HN
J0HN

Reputation: 26921

You are calling getJSON incorrectly. The second parameter is data to pass to the server. You can't just omit it. If no data is expected, just pass null or empty object {} as second parameter:

$.getJSON(tcLink, null, function (condiciones) {
     alert(condiciones); //It never reach.
     $.each(condiciones, function (key, val) {
         alert(val);
     });
 })

See $.getJSON for details

Upvotes: 0

Related Questions