Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET 500 Internal Server Error while calling webmethod from javascript

I'm trying to call the webmethod fucntionality using AJAX but unable to get the appropriate results. I have googled my problem and found many solution but those didn't worked for me. Please guide me what I'm doing wrong. Help will be appreciated.

Cheers

Code Snippet

 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');
                    }
                }
            }
});
 }

Method in Behind Code file

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public string getUsername(string value)
    {
        return "True";
    }

EXCEPTION

 ExceptionType: "System.InvalidOperationException"
  Message: "An attempt was made to call the method 'getUsername' using a        POST request, which is not allowed."
like image 812
M A. Avatar asked May 03 '15 08:05

M A.


3 Answers

First, it the webmethod is in the page class, and not in a Webservice class, then it should be static.

Second, the data transfered is not really a string, but an object, so change it to:

var dataString = { 'value':  value  };

Third thing, "type" is for older versions of jquery, you should either change your ajax call to:

method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...

Or change the function in the server side to get post calls, by removing the

UseHttpGet = true
like image 57
ShaharB Avatar answered Oct 04 '22 06:10

ShaharB


Probably you need to add static to your method declaration as below

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
{
   return "True";
}

if this isn't the case, you could F12 the browser->network then click on the error message to see it briefly.

Concerning the reported issue,the problem with get request, try to make it post

like image 32
Ahmed Alaa El-Din Avatar answered Oct 04 '22 05:10

Ahmed Alaa El-Din


The Answer is here :link

the problem is with the annotation I was using the [ScriptMethod(UseHttpGet = true)] which causing the error. just change the value from true to false.

like image 20
M A. Avatar answered Oct 04 '22 05:10

M A.