2010-09-27 18 views
0

我在使用Jquery时遇到问题。执行多行的Jquery问题

我这样做:

$("#ID_ESTADO").change(function() { 
    document.getElementById("inprogress").style.visibility = "visible"; 
    document.getElementById("ID_CERTIFICADO").setAttribute("disabled", true); 
    var url = '<%= Url.Content("~/") %>' + 'Certificado/ObtenerCertificados/'; 
    $.getJSON(url + $("#ID_TIPO_POLIZA").val() + "/" + $("#ID_POLIZA").val() + "/" + $("#ID_ESTADO").val(), null, function(data) { 
     $("select[id$=ID_CERTIFICADO] > option").remove(); 
     $.each(data, function(index, item) { 
      $("<option> ").attr("value", item.IDCertificado).text(item.IDCertificado).appendTo("#ID_CERTIFICADO"); 
     }); 
     document.getElementById("inprogress").style.visibility = "hidden"; 
     document.getElementById("ID_CERTIFICADO").removeAttribute("disabled"); 
    }); 
}); 

代码背后:

Function ObtenerCertificados(ByVal parID1 As Long, ByVal parID2 As Long, ByVal parID3 As Long) As ActionResult 
    Dim varResultado As JsonResult = Nothing 
    Dim varCertificados As IEnumerable(Of CertificadosVehiculos) = varServicio.ListarCertificados(parID1, parID2, parID3, True) 
    Dim varJsonCertificados As IEnumerable(Of CertificadosVehiculos) = From vari In varCertificados Select New CertificadosVehiculos With {.IDCertificado = vari.IDCertificado} 
    varResultado = Json(varJsonCertificados.ToList()) 
    varResultado.JsonRequestBehavior = JsonRequestBehavior.AllowGet 
    Return varResultado 
End Function 

如果我改变下拉列表ID_ESTADO然后再在下拉列表ID_CERTIFICADO负荷。有时,这种完美的作品,但在代码隐藏(varResultado)有许多成果(有时3000)jQuery函数里面的线路不运行(我的意思是这行):

$("select[id$=ID_CERTIFICADO] > option").remove(); 
$.each(data, function(index, item) { 
    $("<option>").attr("value", item.IDCertificado).text(item.IDCertificado).appendTo("#ID_CERTIFICADO"); 
}); 

我使用jQuery 1.4.2和我试着用1.4.1。 我希望你能帮我解决这个问题。在CSharp或VB中,它的响应很好。对不起我的英语。

回答

0

好的。我解决了这个问题。
首先在ASPX我说:使用JSON JavaScriptSerializer的序列化和反序列化过程中错误:

$.ajaxSetup({ 
    "error": function(XMLHttpRequest, textStatus, errorThrown) { 
     //alert(textStatus); 
     //alert(errorThrown); 
     alert(XMLHttpRequest.responseText); 
    ); 
    } 
}) 

然后我知道了错误。字符串的长度超过上maxJsonLength财产

所以我改变了代码到这背后设置的值:

Function ObtenerCertificados(ByVal parID1 As Long, ByVal parID2 As Long, ByVal parID3  As Long) As ActionResult 
    Dim varCertificados As IEnumerable(Of CertificadosVehiculos) = varServicio.ListarCertificados(parIDTipoPlaca, parNumeroPlaca, parIDVehiculo, True) 
    Dim varJsonCertificados As IEnumerable(Of CertificadosVehiculos) = From vari In varCertificados Select New CertificadosVehiculos With {.IDCertificado = vari.IDCertificado} 

    Dim varSerializer As New JavaScriptSerializer() 
    varSerializer.MaxJsonLength = Int32.MaxValue 
    Dim varResultado As New ContentResult() 
    varResultado.Content = varSerializer.Serialize(varJsonCertificados) 
    varResultado.ContentType = "application/json" 
    Return varResultado 
End Function 

就是这样。 Int32.MaxValue默认值是问题
我希望这可以帮助别人。

0

您看到的问题可能是由于$ .getJSON是一个异步调用,并且它后面的语句立即执行,而无需等待。getJSON完成。

因此,特别是当存在较大的结果集时,可能会出现预期不匹配。

建议您在$ .getJSON成功函数中包含后面的语句。或者,使用$ .ajax调用指定async = false来调用$ .getJSON。