代码如下:
$.ajax({
type: "POST",
contentType: "application/json",
url: "../WebServices/WebService.asmx/GetShopCart",
data: "{}",
dataType: 'html',
success: function (result)
{
var ret = result.d;
$('#dRightFixBaner_Detail_Body').html(ret[0]);
$('#dRightFixBaner_Detail_Bottom_SumCount').find('em').html(ret[1]);
$('#dRightFixBaner_Detail_Bottom_SumMoney').html("¥"+ret[2]);
},
error: function (XMLHttpRequest, textStatus, errorThrown)
{
alert('访问网络失败!' + errorThrown);
}
问题描述:
只有在返回内容特别多的情况下才报500错误,并且在此情况下,手动访问webservices,能够刷出结果,如下:
因此,服务端是绝对没有问题的,也调试过了,没有发现任何问题。
再次强调,只有在服务端返回内容多的情况下才报错误,正常情况下没有任何错误的。
因为后台是.net,因此我特意关注了webconfig文件,设置了最大请求为4M(当然也尝试40M...)
也参考http://blogershub.com/Archive/2013/12/Internal-server-error-500-with-ajax-json-request-or-ajax-jq#.VNMOry7fp-U设置,仍然报错。求高手!
服务端增加try catch,不报错,firefox调试是ok的,一般我都认为500错误就是服务端的错误,看来这次不会了,隐隐约约感觉是返回内容过大,jquery json 解析崩溃了。其实返回的内容也没多少,放到记事本里面,70kb的样子。
在web.config试试加上
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="#####"/> </webServices> </scripting> </system.web.extensions>
第一次我尝试加了,只是位置不是在这个地方,报错,没仔细想,现在看到你的回复,死马当活马医,又加了一次,不过这一次加在末尾,没报错,保存,成功!thank you!
@蓝色的猫儿: 刚刚仔细想了一下,500错误看来还是服务端的问题。返回的数据太大,webservices序列化为json格式时报错,但是这个错误在webservices又无法调试出来,得在webconfig里面配置,原来如此!
@蓝色的猫儿: 但是为什么浏览器访问的时候又是正常的呢?因为手动访问数据不json化,直接返回字符串,看webconfig配置的信息,应该是只有通过jquery ajax脚本访问webservices的时候,返回数据会json化。
@蓝色的猫儿: 可以试试这样显示
<system.web> <compilation debug="true" /> <customErrors mode="Off"/> </system.web> <system.webServer> <httpErrors errorMode="Detailed"/> <asp scriptErrorSentToBrowser="true"/> </system.webServer>
你调试下服务端的方法。然后在看看这个内容。http://forums.asp.net/t/1936660.aspx?get+500+Internal+Server+Error+in+pass+data+with+ajax+and+
你是post请求,你刷新浏览器能测试?使用Rest Client(Chrome 插件)测试下这个webService呢。
下了一个rest client,测试结果说明该webservices正常,有返回结果的。
@蓝色的猫儿: ajax保存的情况下,这个webService也正常吗?那你把你的ajax的参数干掉一下嘛。比如contentType,data,dataType,全都干掉。
@幻天芒: contentType去掉或者修改为application/html、application/text、text/html等等均报错
毕竟任何时候浏览器都返回200 OK的。问题应该不在webservices上面。
@蓝色的猫儿: 你指的报错,是进入ajax的error了吗?如果是的话,贴下具体的错误信息。
“再次强调,只有在服务端返回内容多的情况下才报错误,正常情况下没有任何错误的。”,当服务端数据量返回较大的情况下,trace一下服务端已经走到了哪一步,记录一下请求和应答日志。服务端方法try catch的地方最好记录一下异常日志,也有可能是web服务发生了未捕获异常。最后重启iis再试试。
服务端返回数据量大的时候,调试服务器代码正常运行,并返回结果了,这与浏览器返回200 ok是对应的。另外,上传到服务器上也是如此报错,应该不是本电脑问题或者是iis的问题。
@蓝色的猫儿: 看你的代码: url: "../WebServices/WebService.asmx/GetShopCart",也就是说你把web服务放在了你的应用下面,根据相对地址去访问的,改成绝对地址实验一下是否可行。如果还是不行,看看该web应用下的web.config是否配置正确,web服务可能需要特殊配置。
GET http://localhost:8080/logis/conn?cmd=drop&cid=360f417d-acbf-4bd0-a5cd-7da53caced9a&ram=0.5909123520832509 500 (Internal Server Error)..这个错跟这个是不是类似啊