Javascript 对ajax web方法的第二次回调问题

Javascript 对ajax web方法的第二次回调问题,javascript,jquery,asp.net,ajax,Javascript,Jquery,Asp.net,Ajax,所以我有了这个ajax方法,它可以帮助我从表中找到所选行,并将信息显示到一系列字段中。问题是第一次打电话时效果很好。但是,当我搜索另一条记录时,数据不会显示,我在web explorer控制台中遇到以下错误: Uncaught TypeError: Cannot read property 'Detalles' of null “德塔莱斯?是json带给我的数组。所以我认为请求的时间有问题,有什么建议吗?以下是ajax方法: return $.ajax({ type: "POS

所以我有了这个ajax方法,它可以帮助我从表中找到所选行,并将信息显示到一系列字段中。问题是第一次打电话时效果很好。但是,当我搜索另一条记录时,数据不会显示,我在web explorer控制台中遇到以下错误:

Uncaught TypeError: Cannot read property 'Detalles' of null
“德塔莱斯?是json带给我的数组。所以我认为请求的时间有问题,有什么建议吗?以下是ajax方法:

return $.ajax({
        type: "POST",
        url: "../../../ServiciosWeb.asmx/CargarDetallesRequisicion",
        data: '{IdRequisicion:"'+ idRequisicion +'" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false
});
我希望有人能帮助我。。。谢谢

更新: 这是将我的信息转换为JSon的方法

Function DataSetToJSON(ds As DataSet) As String
        Dim dict As New Dictionary(Of String, Object)

        For Each dt As DataTable In ds.Tables
            Dim arr(dt.Rows.Count - 1) As Object

            For i As Integer = 0 To dt.Rows.Count - 1
                arr(i) = dt.Rows(i).ItemArray
            Next

            dict.Add(dt.TableName, arr)
        Next

        Dim json As New JavaScriptSerializer
        Return json.Serialize(dict)
    End Function
当指定为空时,我检查返回的数据,是的,它带来了信息,这就是为什么对我来说与时间有关。这里是我调用
$.ajax
方法的地方:

 if (idRequisicion > 0) {
        console.log(idRequisicion);
        $.when(
        CargarDetalles()
        ).done(MostrarDetalles);
    }
此条件放在
$(文档)中。就绪

已解决:

因此,问题是:

if (idRequisicion > 0) {

        function MostrarInformacion(fn, tiempo) {

            var dfd = $.Deferred();

            setTimeout(function () {

                dfd.resolve(fn());
            }, tiempo || 0);

            return dfd.promise();
        }
        var promise = MostrarInformacion(function () {
            $.blockUI({
                css: {
                    border: 'none',
                    padding: '0',
                    backgroundColor: '#000',
                    '-webkit-border-radius': '10px',
                    '-moz-border-radius': '10px',
                    opacity: .5,
                    color: '#fff',
                    onBlock: $.when(CargarDetalles()).done(MostrarDetalles)
                }
            });
            setTimeout($.unblockUI, 2000);

            }, 300);

    }

忽略这个BlocUI,这是新的。总之,解决我的问题可能不是最有效的方法,但从现在开始就可以了

jQuery.when需要延迟对象:

jQuery.when( deferreds ) Returns: Promise
提供一种基于一个或多个回调函数执行回调函数的方法 对象,通常是表示异步事件的延迟对象

您应该将ajax请求放在$中。当直接调用而不是函数调用时,如下所示:

 $.when(
       $.ajax({
        type: "POST",
        url: "../../../ServiciosWeb.asmx/CargarDetallesRequisicion",
        data: '{IdRequisicion:"'+ idRequisicion +'" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false
}
        ).done(MostrarDetalles);

如果您需要相同的设置,可能应该只返回ajax设置,如
$。ajax(cargardetales())
,而不是完整的请求

尝试其他一些记录……可能ajax请求第二次失败,因为它找不到匹配项。JSON格式说明您应该使用括号:
数据:'{“idrequisiion”:“+idRequisicion+”“}”,将数据行数据“{idRequisicion:“+idRequisicion+”}”更改为数据:{idRequisicion:idRequisicion}”,但您必须为我们提供更多的javascript代码不要手动编写json,它很容易出错,而且您的引号中已经有错误。请使用json.stringify来为您执行此操作。需要显示更多代码,不清楚返回到哪里或回叫用于响应我不确定这是否是您的请求的问题,是吗正在尝试访问null属性。可能您的后端未返回任何内容,您已验证您的响应?您的后端中是否有内容?是否可以发布有关响应的内容?