外部JavaScript文件中的AJAX调用未到达控制器中的ActionResult
我正在尝试检查数据库中是否存在电子邮件地址。我有一个外部JavaScript文件,用来调用jQuery(保持视图干净)。也许是因为我在运行时启用了SSL?(我正在使用https) 外部js文件中的函数:外部JavaScript文件中的AJAX调用未到达控制器中的ActionResult,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试检查数据库中是否存在电子邮件地址。我有一个外部JavaScript文件,用来调用jQuery(保持视图干净)。也许是因为我在运行时启用了SSL?(我正在使用https) 外部js文件中的函数: function checkemail() { var email = $("#email").val(); $.ajax({ url: "/Account/CheckEmailExists/", data: JSON.stringify({ p:
function checkemail() {
var email = $("#email").val();
$.ajax({
url: "/Account/CheckEmailExists/",
data: JSON.stringify({ p: email }),
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
alert(data)
}
});
}
控制器中的操作:
public ActionResult CheckEmailExists(string p)
{
bool bEmailExists = false;
using (RBotEntities EF = new RBotEntities())
{
var query = (from U in EF.AspNetUsers
where U.Email == p
select U).FirstOrDefault();
if(query.Email != null)
{
bEmailExists = true;
}
else
{
bEmailExists = false;
}
}
return Json(bEmailExists, JsonRequestBehavior.AllowGet);
}
我似乎在陈述以下内容时出错:
XML分析错误:未找到根元素位置:
第1行,
第1栏:
我的理解是,ActionResult
不存在。但确实如此
我是否做错了什么,或者为什么不能通过外部JavaScript文件调用ActionResult
内部控制器
[httppost]
public ActionResult CheckEma.........
在JS中
这里不需要
Json.Stringify
和ContentType
function checkemail() {
var email = $("#email").val();
$.ajax({
url: "/Account/CheckEmailExists",
data: { p: email },
type: "POST",
success: function (data) {
alert(data)
}
});
}
所以我找到了问题的原因 在我的操作结果之上,我需要添加
[AllowAnonymous]
数据注释,然后它到达我的操作结果
!我宁愿不允许匿名,但它是有效的,我想分享一下,以防它对其他人有帮助。下面是我的代码:
行动结果:
[AllowAnonymous]
public ActionResult CheckEmailExists(string p)
{
bool bEmailExists = false;
using (RBotEntities EF = new RBotEntities())
{
var query = (from U in EF.AspNetUsers
where U.Email == p
select U).FirstOrDefault();
if (query.Email != null)
{
bEmailExists = true;
}
else
{
bEmailExists = false;
}
}
return Json(bEmailExists, JsonRequestBehavior.AllowGet);
}
JavaScript文件中的JavaScript函数:
function checkemail() {
var email = $("#email").val();
var bReturnedValue = false;
$.ajax({
url: "/Account/CheckEmailExists/",
data: { p: email },
async: false,
success: function (data) {
if(data)
{
bReturnedValue = true;
}
else
{
bReturnedValue = false;
}
}
});
return bReturnedValue;
}
这就是我发起它的方式(我正在做一个popover来指定电子邮件的存在):
您的控制器正在接收请求,但正在将其作为XML读取。您使用哪个版本的ASP.NET?MVC2不支持内置json,而MVC3支持内置json。仍然无法访问控制器,并且数据仍然返回在我的控制器中添加[HttpPost]的内容,但结果仍然相同:(我有一种感觉,这是由其他一些潜在的问题造成的。我过去做过ajax调用,一切都很好。我也尝试了你昨天的建议,但没有任何效果……我得到的错误与我的帖子中的错误相同:XML解析错误:找不到根元素位置:控制器仍然无法访问d、 而且数据仍在返回看似空白或空字符串的内容删除Ajax URL中CheckEmailExist后的“/”为什么不使用远程验证来检查电子邮件是否存在?删除“/”不幸的是,没有什么不同。我在做一种只在最后提交的向导,所以每次我进入下一步时,我都会使用jQuery进行所有验证,所以这就是为什么我需要通过ajax调用调用actionresult的原因。但这不起作用是毫无意义的……应该添加
数据类型:“json”
在ajax调用中。不确定这是否有效
function checkemail() {
var email = $("#email").val();
var bReturnedValue = false;
$.ajax({
url: "/Account/CheckEmailExists/",
data: { p: email },
async: false,
success: function (data) {
if(data)
{
bReturnedValue = true;
}
else
{
bReturnedValue = false;
}
}
});
return bReturnedValue;
}
$("#createacc_next").click(function () {
var bEmailExists = false;
bEmailExists = checkemail();
if (bEmailExists) {
$("#email").attr("disabled", false).css("border-color", "red");
$('#email').popover({ title: 'Attention', content: 'Email address already exists', placement: 'top', trigger: 'focus' });
Email_Validation_Passed = false;
}
})