2010-09-27 22 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。