从javascript调用webmethod时发生ASP.NET 500内部服务器错误
我试图使用AJAX调用从javascript调用webmethod时发生ASP.NET 500内部服务器错误,javascript,c#,asp.net,ajax,Javascript,C#,Asp.net,Ajax,我试图使用AJAX调用webmethod函数性,但无法得到适当的结果。我在谷歌上搜索了我的问题,找到了很多解决方案,但这些都不适合我。请告诉我我做错了什么。我们将不胜感激 干杯 代码片段 function checkUserNameExists() { //initialization var pagePath = window.location.pathname + "/getUsername"; var value = document.getElementById('control_u
webmethod
函数性,但无法得到适当的结果。我在谷歌上搜索了我的问题,找到了很多解决方案,但这些都不适合我。请告诉我我做错了什么。我们将不胜感激
干杯
代码片段
function checkUserNameExists() {
//initialization
var pagePath = window.location.pathname + "/getUsername";
var value = document.getElementById('control_userName').value;
var dataString = "{ 'value':'" + value + "' }";
$.ajax({
type: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",
error:
function (XMLHttpRequest, textStatus, errorThrown) {
},
success:
function (result) {
var flag = true;
if (result != null) {
flag = result.d;
if (flag == "True") {
alert('okay fine you are good');
}
else {
alert('try again');
}
}
}
});
}
隐藏代码文件中的方法
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string getUsername(string value)
{
return "True";
}
例外情况
ExceptionType: "System.InvalidOperationException"
Message: "An attempt was made to call the method 'getUsername' using a POST request, which is not allowed."
您可能需要向方法声明中添加static,如下所示
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
{
return "True";
}
如果不是这种情况,您可以F12浏览器->网络,然后单击错误消息简要查看它
关于报告的问题,get请求的问题,请尝试将其设置为post首先,如果webmethod在page类中,而不是在Webservice类中,那么它应该是静态的 其次,传输的数据实际上不是字符串,而是对象,因此将其更改为:
var dataString = { 'value': value };
第三件事,“type”是对于较旧版本的jquery,您应该将ajax调用更改为:
method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...
或者通过删除
UseHttpGet = true
答案如下:
问题在于我使用的注释是导致错误的
[ScriptMethod(UseHttpGet=true)]
。只需将值从true更改为false即可。这不是此问题的具体问题,但您可以检查一些内容,以便更好地了解问题的原因
- 检查的“概述”部分中的状态代码和请求类型 请求头
- 如果存在任何json错误,请检查响应标题
- 检查响应以获取消息、堆栈跟踪和异常 类型
- 检查标题中的请求有效负载部分以了解参数 通过了
查看更多详细信息 在我的例子中,问题是“数据”字段(GET和POST两种情况)。作为测试,从AJAX调用中删除“数据”,同时删除web方法参数,如果它起作用,那么问题在于“数据”字段的格式: 一些例子:
data: JSON.stringify({ "parameter": variable }) WORKS
data: JSON.stringify({ parameter: variable }) WORKS
data: '{"parameter": "' + variable + '"}' WORKS
data: '{parameter: ' + variable + '}' don't works
data: JSON.stringify({ 'parameter': 'value' }) WORKS
data: '{"parameter":"value"}' WORKS
data: "{'parameter':'value'}" WORKS
data: '{parameter:value}' don't works
data: {parameter:value} don't works
data: {"parameter":"value"} don't works
data: {'parameter':'value'} don't works
我的控制台显示以下错误:GET 500(内部服务器错误)yes,在F12控制台打开期间单击此错误,它将详细显示错误。此外,您可以尝试从客户端和服务器端函数中删除参数,以检查发送参数是否不是错误我已编辑问题并发布异常。感谢您删除[ScriptMethod(UseHttpGet=true)],并将请求设置为post请求,然后尝试itokay。我已删除该请求并将其设置为post。但是你能告诉我为什么我们应该发布请求吗?如果我使用GET而不是POST呢?是的,这个方法是在page类中实现的。我已将其签名更改为静态,但仍然得到相同的错误。-->GET 500(内部服务器错误)您是否执行了其他操作?var dataString={'value':value};而不是var dataString=“{'value':'”+value+“}”;?你能在这里发布错误吗?是的,我这与你上面提到的相同,但仍然是相同的结果。好的,我已经更新了上面的问题,并分享了错误消息。在较旧版本的jquery中使用了“type”,因此调用忽略了它,而是发送了一个帖子。你必须把它改成“方法”
data: JSON.stringify({ "parameter": variable }) WORKS
data: JSON.stringify({ parameter: variable }) WORKS
data: '{"parameter": "' + variable + '"}' WORKS
data: '{parameter: ' + variable + '}' don't works
data: JSON.stringify({ 'parameter': 'value' }) WORKS
data: '{"parameter":"value"}' WORKS
data: "{'parameter':'value'}" WORKS
data: '{parameter:value}' don't works
data: {parameter:value} don't works
data: {"parameter":"value"} don't works
data: {'parameter':'value'} don't works