0

我正在尝试处理 JSON 请求,getJSON 中使用的 url 是

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

我的部分视图使用此返回的文本:

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

它返回此数据

    [{"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}]

这是这个类的表示:

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

注意:这个类是在http://json2csharp.com/生成的, 我的 jquery 代码是这样的:

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

问题是回调函数永远不会到达。

4

2 回答 2

1

在聊天中,您包含以下代码:

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()); 
}

但是您应该返回一个 json 类型,如下所示:

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

要对此进行测试,您可以编写以下代码:

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

在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);
 });
}

使用 GET 方法更新请求:

public JsonResult CondicionesMostrar(int numIdTransaccion, int numIdConcepto) 
{ 
    return Json(
          new {NumIdTransaccion = numIdTransaccion, NumIdConcepto = numIdConcepto}
          ,JsonRequestBehavior.AllowGet
    ); 
}
于 2012-11-22T18:33:59.670 回答
0

你打错电话getJSON了。第二个参数是要传递给服务器的数据。你不能忽略它。如果不需要数据,只需传递null或清空对象{}作为第二个参数:

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

详情见$.getJSON_

于 2012-11-22T16:19:04.783 回答