【问题标题】:jQuery callback function not executedjQuery回调函数未执行
【发布时间】:2014-01-20 20:14:49
【问题描述】:

我有一个带有几个输入字段的联系表单和一个充当按钮的 div - 当我单击它时,它会调用一个验证表单的函数,如果一切正常,它就会提交它。该函数将数据从输入发送到API.php 文件,该文件调用BusinessLogic.php 文件中的发送函数。提交表单后 - 应激活回调函数并为确认 div 设置动画。

输入的 HTML:

<div id="contact_inputs_block">
    <div class="div_contact_form_input_box div_input_name">
        <input type="text" name="Name" placeholder="* Name" id="name">
    </div>
    <div class="div_contact_form_input_box div_input_phone">
        <input type="tel" name="Phone" placeholder="* Phone" id="phone">
    </div>
    <div class="div_contact_form_input_box div_input_email">
        <input type="email" name="Email" placeholder="* Email" id="email">
    </div>
</div>
<div class="form_confirmation_wraper">
    <div id="div_form_confirmation">
        Message sent.
    </div>
    <div class="div_send_form">

    </div>
</div>

这是我的功能:

function submit_form(language)
{   

var email_str = $("#email").val();
var errors = new Array();

$("#contact_inputs_block>div:not(:last-child)").css({'border-color' : '#a5957e', 'background-color' : '#f8f8f8'});


if ($("#name").val()=="")
{
    errors.push(".div_input_name");
}
if(!validate_email(email_str))
{
    errors.push(".div_input_email");
}
if ($("#phone").val()=="")
{
    errors.push(".div_input_phone");
}


if (errors.length == 0)
{


    $.getJSON("inc/API.php",
    {
        command : "send_contact_form",
        name : $("#name").val(),
        email : email_str,
        phone : $("#phone").val(),
        message : $("#message").val().replace(/\n/g, '<br>'),
        form_language: language
    } ,function(){
        alert("sent");
        $("#div_form_confirmation").animate({opacity:1}, 1000, function(){
            setTimeout($("#div_form_confirmation").animate({opacity:0}, 3000, function(){location.reload()}),6000);
        }); // end callback function
    }); // end getJSON
} // end if
else
{
    for (var i = 0; i <= errors.length; i++)
    {
        $(errors[i]).css({'border-color' : '#E60005', 'background-color' : '#ffc4c9'});
    }
}
}

这是API.php中的函数:

include_once 'BusinessLogic.php';
session_start();

$command = $_REQUEST["command"];

switch($command)
{
    case "send_contact_form" :
        send_contact_form($_REQUEST["name"], $_REQUEST["email"], 
            $_REQUEST["phone"], $_REQUEST["message"], $_REQUEST["form_language"]);
        break;
}

BusinessLogic.php 实际发送邮件。

邮件正在发送中,一切正常。问题是 submit_form() 函数的回调从未被触发,我没有看到确认邮件已发送。

为什么会发生这种情况,我该如何解决?谢谢!

【问题讨论】:

  • 能否提供表单的html代码?
  • 您的 php 没有返回 JSON,导致抛出 parseerror。改用 $.get,或者修改你的 php 让它返回 json。
  • @vooD 我用 HTML 更新了问题。
  • @KevinB 尝试返回 JSON 并使用 $.get,但仍然没有激活回调。
  • @vooD 问题解决了,我不得不使用 $.post 而不是 $.getJSON。感谢您的意见,我很感激!

标签: php jquery json callback


【解决方案1】:

另一种方法可能是使用 $.post 而不是 $.getJSON(其他一切都将保持不变)。它将进行所需的 ajax 调用。定义的参数将在 $_POST 数组中($_REQUEST 很好)

【讨论】:

  • 成功了,谢谢!有趣的是,这个确切的代码在我的其他形式中也适用于我,我只是重用它并进行了一些适当的调整,但这次由于某种原因它没有工作。再次感谢!
  • 可能是跨域问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2022-12-08
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多