【问题标题】:AJAX: return true or false on 'success:'AJAX:在“成功:”上返回真或假
【发布时间】:2013-05-08 19:05:58
【问题描述】:

我有以下 AJAX 脚本,但由于某种原因,var ok 它没有返回 true 或 false,因此表单可以继续:

function ajax_call(email,title,url){
    var email = document.getElementById("email").value;
    var title = document.getElementById("title").value;
    var url = document.getElementById("url").value;
    var parametros = {"emaail":email, "tiitle":title, "uurl":url};
    var ok = true;
    $.ajax({
        data: parametros,
        url: 'validate.php',
        type: 'post',
        error: function () {
            alert("An error has occurred! Try Again!");
        },
        success: function (response) {

            if(response == 'bien') { ok = true; } else { $("#ajax_cal").html(response); ok = false; }

        }
    });

return ok;
}

HTML:

<form onsubmit="return ajax_call();">
...
</form>

PHP:

<?php
//////....
    if(!empty($errors)) { 
        foreach($errors as $error) { 
            echo '<li>'.$error.'</li>';
        }
    } else { echo 'bien'; }

?>

一切都很好,除了返回值。 提前致谢。

【问题讨论】:

  • 如果不返回真假,返回什么?
  • 另外,response 返回什么?它会返回“bien”吗?
  • AJAX 是异步的,它总是会返回 true,因为它不会等待响应来改变值。
  • @AnthonyGrist - 完美答案 :) 他的函数可能会返回一个承诺,然后在满足请求时使用该承诺。
  • @AnthonyGrist 所以这是不可能的吗?响应值将返回“bien”或存储在数组中的所有错误。根据价值,我知道它是真还是假。除了验证之外,它做的一切都很好。

标签: php jquery ajax


【解决方案1】:

完全阻止提交,发送ajax请求,如果好就提交表单。

HTML:

<form id="myform">
...
</form>

JavaScript:

$("#myform").submit(function(e){
    // prevent submit
    e.preventDefault();

    var email = document.getElementById("email").value;
    var title = document.getElementById("title").value;
    var url = document.getElementById("url").value;
    var parametros = {"emaail":email, "tiitle":title, "uurl":url};
    $.ajax({
        data: parametros,
        url: 'validate.php',
        type: 'post',
        context: this,
        error: function () {
            alert("An error has occurred! Try Again!");
        },
        success: function (response) {

            if($.trim(response) == 'bien') { 
                this.submit(); // submit, bypassing jquery bound event
            } 
            else { 
                $("#ajax_call").html(response); 
            }

        }
    });

});

【讨论】:

  • 它给您带来了什么错误,或者什么没有解决?这是一种非常直接的方法,如果出现问题,很可能是由于 ajax 请求或此代码外部的原因。
  • 我知道它应该可以工作,因为响应将返回“bien”(好)或将打印错误。他们只是选项,不知道为什么不工作:(
  • 嘿伙计,谢谢!我实际上缺少的是这一行: $(document).ready(function() { });谢谢!
【解决方案2】:

您在函数结束时返回 ok。这是在发送和完成 ajax 请求之前返回的。

你不能依赖你的函数的返回值,你应该在你的“成功”部分做一些事情。这基本上取决于你想用你的返回值做什么

【讨论】:

  • 但是如果我只在我的 PHP 上使用 1 个回显,我该怎么办...这是一个验证表单,如果一个数组有错误,它会回显错误,否则它会回显 'bien ';所以这就是响应有'bien'的地方,它将返回true。
【解决方案3】:

我是 jquery 的新手,但在我一直在处理的一些脚本中,我不得不在你拥有的“响应”前面加上前缀。

比如……

if(response.tiitle == 'bien') { ok = true; } else { $("#ajax_cal").html(response); ok = false; }

另外请注意,您的“参数”中有双字母,但我确信这是故意的(即标题而不是标题等)。

【讨论】:

  • 可能是这种情况,但这不是他的脚本未能完成他想要它做的事情的原因。见 periklis 的回答。
  • 感谢 Jhon,这是故意留下的,以便我可以在 PHP 中接收这些值。问题是获取返回值
猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 2016-02-21
相关资源
最近更新 更多