为什么对php的简单ajax调用表现出如此奇怪的行为?

时间:2015-03-06 18:32:58

标签: javascript php jquery ajax jquery-mobile

我正在调用jQuery Mobile表单到一个简单的PHP邮件文件。我已经使用我从ajax调用传递的相同数据测试了PHP文件,这很好用。但是,使用ajax时,不会发送电子邮件,地址栏包含查询字符串。我真的需要更多的眼睛看这个,因为我的矿似乎永远交叉。

表格摘录

        <form id="hipaa-form" name="hipaa-form" autocomplete="on" data-ajax="false">
            <p data-role="fieldcontain">
                <label for="name">Name:<span class="smallred">*</span></label>
                <input type="text" name="name" id="name" autofocus required placeholder="Full Name">
            </p>
            <p>
                <input type="submit" name="send" id="send" style="cursor:pointer" value="Submit">
            </p>
        </form>

的JavaScript

$('#hipaa-form').on('submit', function (e) {
    var data = $(this).serialize();
    $.ajax({
        type: "GET",
        url: email.php,
        data: data,
        dataType: "text",
        success: function (result) { alert(result); },
        error: function(xhr, status, error) {
                  var err = eval("(" + xhr.responseText + ")");
                  alert("Error: " + +err.Message)
               }
    });
});

请注意,数据变量设置正确,并且是在地址栏中结束的字符串。来自成功功能的警报显示整个网页,但不再发送电子邮件。我尝试在PHP中设置自定义错误处理程序,但它们根本没有帮助。

PHP     

    $body = "Full Name: " . $_GET["name"] . "\r\n";
    $body = $body . "email: " . $_GET["email"] . "\r\n";
    $body = $body . "Phone: " . $_GET["phone"] . "\r\n";
    $body = $body . "website: " . $_GET["Website-URL"] . "\r\n";
    $body = $body . "app. type: " . $_GET["pgm-type"] . "\r\n";
    $body = $body . "uses DB: " . $_GET["uses-db"] . "\r\n";
    $body = $body . "saves data: " . $_GET["stores-patient-data"] . "\r\n";
    $body = $body . "db vendor: " . $_GET["database-vendor"] . "\r\n";
    if (isset($_GET["db-other"]))
        $body = $body . "other db: " . $_GET["db-other"] . "\r\n";

    $to = "contact.us@bunkerhill.com";
    $subject = "HIPAA Form Submission";

    mail($to, $subject, $body, "From: contact.us@text.bunkerhill.com");
    echo "Form Submitted"

?>

我的测试网站是:http://test.bunkerhill.com/

TIA

2 个答案:

答案 0 :(得分:4)

您需要阻止使用preventDefault();

提交表单
$('#hipaa-form').on('submit', function (e) {
    e.preventDefault();
...
}

您的ajax请求应使用带有GET的查询字符串参数,或更改为type: "POST"并调整您的PHP以使用$_POST

示例:

type: "GET",
url: "page.php?foo=x&bar=y"

或者

type: "POST",
url: "page.php",
data: data

最后,我有点担心这个例子,包括HIPAA信息。您可能需要考虑将信息存储在安全位置的方法,并简单地发送一封电子邮件,说明“嘿,有新消息可用。点击此处对我们的安全系统进行身份验证以进行阅读。”并不是说你的方法有任何绝对的错误,但感觉还有其他与HIPAA相关的责任需要考虑。

答案 1 :(得分:0)

您的Ajax定义中的

url param应该是&#39; email.php&#39;在引号中,所以改变

url: email.php

url: 'email.php'

如果没有它只是发送一个电话http://test.bunkerhill.com/,你的PHP代码发送电子邮件根本就不会被调用:)