0

在我的 MVC 视图中,

一个提交按钮,我在其中检查所有验证。如果验证错误,我将返回 false。这样表格就不会张贴了。

但是,我正在使用 Ajax get 方法检查重复检查。如果值存在,它将返回 true。然后我将为按钮提交返回 false。

但是在我的情况下,ajax 调用没有返回任何内容。或者更确切地说,该过程不会等待 ajax 返回。无论如何我可以实现它。

我的按钮点击代码

var isDraftValid = 0;
        if(checkAjax()==false)
        {
            isDraftValid++;
        }
        if(check2()==false)
        {
            isDraftValid++;
        }
        if(isDraftValid>0)
        {
          return false;
        }

CheckAjax 代码:

var href = '@Url.Action("IsDuplicate", "Book")' + '/' + bTitleVal;
$.ajax({
    type: "get",
    url: href,
    dataType: "json",
    traditional: true,
    cache: false,
    contentType: 'application/json',
    //data: JSON.stringify({ bookTitle: bTitleVal }),
    data: {},
    success: function (returndata) {
        debugger;
        if (returndata == true) {
            return true;
        }
        else {
            return false;
        }
    },
    error: function (arg, data, value) {
    }
});
4

4 回答 4

1

您的 ajax 请求是异步的,因此您必须使用回调来完成,或者(不推荐)添加 async: false:

$.ajax({
    type: "get",
    url: href,
    async: false

更详细一点,在 CheckAjax 方法中声明结果变量,并在请求完成时为其赋值,然后返回此变量。

于 2013-07-24T10:10:05.077 回答
1

试试这个

var href = '@Url.Action("IsDuplicate", "Book",new{bTitleVal=bTitleVal})' 
于 2013-07-24T10:10:18.593 回答
1

只提醒'returndata'你能看到“真”还是“假”?,尝试在您的情况下引用它们并给 e.preventDefault 一个镜头,而不是 return false

于 2013-07-24T10:12:29.783 回答
0

也许你可以像这样使用不同的调用序列:

dataOk = true;
if(!check2())
{
    dataOk = false;
}
if(dataOk))
{
    dataOk = checkAjax();
}
return dataOk;

或者我不明白你的要求?

问候

于 2013-07-24T11:45:55.023 回答