I wanted to send Mobile
number and EmailID
using jQuery AJAX to my MVC controller to check whether these details are already exist in the database or not.
When I am using the [HttpPost]
attribute on my action method, I am getting error as:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at url.
If I remove the [HttpPost]
attribute, my action method is getting called, but all the values received in action method argument are null
.
Below is the action method code:
public class LogOnModel
{
public string Mobile { get; set; }
public string EmailID { get; set; }
}
[HttpPost]
[AllowAnonymous]
///AJAXService/LogOnAjax
public ActionResult LogOnAjax(LogOnModel obj)
{
return Json(true);
}
Below is my AJAX call:
var LoginModel = {
'Mobile': "ASH",
'EmailID': "MITTAL",
};
$.ajax({
url: 'http://localhost:51603/AJAXService/LogOnAjax',
type: 'GET',
contentType: 'application/json',
dataType: 'jsonp',
data: JSON.stringify(LoginModel),
success: function (result) {
if (result == true) {
window.location = "/Dashboard";
} else {
$QuickLoginErrors.text(result);
}
}
});
I have placed the code below in my web.config file to avoid CORS errors:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
If the AjaxService
controller is in the same project as the View
you're working on:
var LoginModel = {
Mobile: "ASH",
EmailID: "MITTAL"
};
$.ajax({
url: '@Url.Action("LogOnAjax","AJAXService")', // try to use Url Helper when possible
type: 'POST', // use Get for [HttpGet] action or POST for [HttpPost]
//contentType: 'application/json', not needed
//dataType: 'jsonp', jsonp is for sending to a site other than the current one..
data: LoginModel, // no need to stringify
success: function (result) {
if (result == true) {
window.location = "/Dashboard";
} else {
$QuickLoginErrors.text(result);
}
}
});
Keep the [HttpPost]
and add this line right before your $.ajax
line:
$.support.cors = true;
Also change your $.ajax
method to match your [HttpPost]
. Change the line:
type: 'GET',
to
method: 'POST',
Note: This only worked in IE for me. Chrome still refused to complete the Ajax call. However, that was a while back and I'm not sure if the newer versions of Chrome will work with this line.
Very important note: Only use this line in development. Do not compile your App with this line.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With