C# ajax调用有时不会激发WebC方法

C# ajax调用有时不会激发WebC方法,c#,jquery,asmx,C#,Jquery,Asmx,我在我的网页中有一个关于按钮点击事件的jQuery.ajax调用。这个ajax调用将相当多的标记发送回服务器。经过一些处理后,服务器发回一个小URL地址。这有时很好,但有时不行。我在ajax调用之前有一个断点,在我的WebMethod中也有一些断点。看起来有时候WebMethod甚至没有被击中 是什么导致.ajax调用失败?我假设我发送的参数中一定有什么东西。但我正在逃避加价 有人有什么想法吗 $.ajax({ type: 'POST', url: 'WebServices.as

我在我的网页中有一个关于按钮点击事件的jQuery.ajax调用。这个ajax调用将相当多的标记发送回服务器。经过一些处理后,服务器发回一个小URL地址。这有时很好,但有时不行。我在ajax调用之前有一个断点,在我的WebMethod中也有一些断点。看起来有时候WebMethod甚至没有被击中

是什么导致.ajax调用失败?我假设我发送的参数中一定有什么东西。但我正在逃避加价

有人有什么想法吗

$.ajax({
    type: 'POST',
    url: 'WebServices.asmx/GetBitmapPathForVML',
    contentType: 'application/json; charset=utf-8',
    data: '{"sVML" : "' + escape($('#divChart')[0].innerHTML) + 
      '","width" : 800,"height": 600}',
    dataType: 'json',
    success: function(result) {
            var newWindow = window.open ("", "Chart","");
            //blah blah
            newWindow.document.write("<BODY>");
            newWindow.document.write(
              '<img src="file" alt="Chart"></img>'.replace('file',result.d)
            );  
            newWindow.document.write("</BODY>");    
            //blah blah
    }
});  

我建议您重新编写您的方法,如下所示:

$.ajax({
    type: 'POST',
    url: 'WebServices.asmx/GetBitmapPathForVML',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        sVML: $('#divChart').html(),
        width: 800,
        height: 600
    }),
    dataType: 'json',
    success: function(result) {
        var newWindow = window.open ("", "Chart","");
        //blah blah
        newWindow.document.write("<BODY>");
        newWindow.document.write(
            '<img src="file" alt="Chart"></img>'.replace('file',result.d)
        );  
        newWindow.document.write("</BODY>");    
        //blah blah
    }
}); 

我建议您重新编写您的方法,如下所示:

$.ajax({
    type: 'POST',
    url: 'WebServices.asmx/GetBitmapPathForVML',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({
        sVML: $('#divChart').html(),
        width: 800,
        height: 600
    }),
    dataType: 'json',
    success: function(result) {
        var newWindow = window.open ("", "Chart","");
        //blah blah
        newWindow.document.write("<BODY>");
        newWindow.document.write(
            '<img src="file" alt="Chart"></img>'.replace('file',result.d)
        );  
        newWindow.document.write("</BODY>");    
        //blah blah
    }
}); 
埃尔·罗诺科

我建议您添加一个错误:回调以检查发生了什么。也许你可以从中得到有用的信息。

El Ronnoco


我建议您添加一个错误:回调以检查发生了什么。也许你可以从中得到有用的信息。

我不喜欢回答我自己的问题,但我不是,真的。但问题在于最大JSON长度属性

我找到了

…并将此添加到我的网络配置中

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2097152"/>
        </webServices>
    </scripting>
</system.web.extensions>    

谢谢大家的回答,尤其是那些关于捕捉错误的回答。

我不喜欢回答我自己的问题,不是说我是,真的。但问题在于最大JSON长度属性

我找到了

…并将此添加到我的网络配置中

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2097152"/>
        </webServices>
    </scripting>
</system.web.extensions>    

感谢所有的回答,特别是关于捕捉错误的回答。

如果方法中没有任何内容为空,您是否能够一直点击服务?检查jQuery ajax的错误和超时选项,这应该会对您有所帮助。另外,如果您调用Web服务的方式有问题,您应该会从客户端收到一个脚本错误。@jamietre谢谢,我发现了错误。字符串的长度超过了maxJsonLength属性上设置的值。知道如何处理吗?可能是缓存问题。。尝试通过在设置中添加cache:false来禁用cache。@El Ronnoco,请参见:。。。但是,与其尝试调整允许的最大大小,不如考虑体系结构,为什么要将整个HTML表发送回客户端?也许你应该提取相关数据并发送出去。使用jquery应该很容易做到这一点。如果出于某种原因确实要这样做,您可能必须将其分块并多次调用该服务。如果您没有向该方法发布任何null值,您是否能够一直命中该服务?请检查jQuery ajax的错误和超时选项,这将对您有所帮助。另外,如果您调用Web服务的方式有问题,您应该会从客户端收到一个脚本错误。@jamietre谢谢,我发现了错误。字符串的长度超过了maxJsonLength属性上设置的值。知道如何处理吗?可能是缓存问题。。尝试通过在设置中添加cache:false来禁用cache。@El Ronnoco,请参见:。。。但是,与其尝试调整允许的最大大小,不如考虑体系结构,为什么要将整个HTML表发送回客户端?也许你应该提取相关数据并发送出去。使用jquery应该很容易做到这一点。如果出于某种原因您真的想这样做,您可能必须将其分成若干块并多次调用该服务。我需要使用JSON.stringify哪个库?。但是这种方法是在现代浏览器中本机实现的,如果支持,库只需将调用委托给本机方法。因此,如果您使用的是现代浏览器,则不需要包含任何内容。恐怕我不得不为IE6开发:这是一个很好的建议,因为我对我的JSON结构不满意。我将努力在未来的项目中使用它,但是在这个例子中,这不是我问题的原因。我需要使用JSON.stringify?哪个库?。但是这种方法是在现代浏览器中本机实现的,如果支持,库只需将调用委托给本机方法。因此,如果您使用的是现代浏览器,则不需要包含任何内容。恐怕我不得不为IE6开发:这是一个很好的建议,因为我对我的JSON结构不满意。我将努力在未来的项目中使用它,但在这种情况下,这不是我问题的原因。