Maor Cohen
Maor Cohen

Reputation: 956

Send data from js to controller

I have this ajax:

function sendData() {
    var question = (document.getElementById('question').value).toString();
    var c = (document.getElementById('c').value).toString();
    $.ajax({
        url: '/Home/InsertData',
        type: 'POST',
        data: {question:question, c:c},
        // data: {},
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function () {
            alert('suc');
        },
        error: function (error) {
            alert('error');
        }
    });
}

in my HomeController, I have the function:

[HttpPost]
public void InsertData(string question, string c)
//public void InsertData()
{
    this.insertDataToCustomers(question, c);

}

when I run it, I got an error of:

POST http://localhost:2124/Home/InsertData 500 (Internal Server Error) 

If I didn't ask for input values in InsertData function and didn't send data in the ajax, it works. why can't I send data to InsertData function?

p.s. There are values in question and c

thank you!

Upvotes: 0

Views: 3104

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038720

Remove this:

contentType: 'application/json; charset=utf-8',

You are not sending any JSON to the server, so this is an incorrect content type for the request. You are sending a application/x-www-form-urlencoded request.

So:

function sendData() {
    var question = $('#question').val();
    var c = $('#c').val();
    $.ajax({
        url: '/Home/InsertData',
        type: 'POST',
        data: { question: question, c: c },
        success: function () {
            alert('suc');
        },
        error: function (error) {
            alert('error');
        }
    });
}

Another problem with your code is that you indicated dataType: 'json' which means that you expect the server to return JSON but your controller action doesn't return anything. It's just a void method. In ASP.NET MVC controller actions should return ActionResults. So if you want to return some JSON for example to indicate the status of the operation you could have this:

[HttpPost]
public ActionResult InsertData(string question, string c)
{
    this.insertDataToCustomers(question, c);
    return Json(new { success = true });
}

Of course you could return an arbitrary object which will be JSON serialized and you will be able to access it in your success AJAX callback.

Upvotes: 2

Related Questions