jQuery-$ .ajax成功回调数据为空

问题描述

| 我正在使用jQuery $ .ajax将简单的联系表发布到PHP脚本。我正在尝试评估响应,并以此为基础,要么用“谢谢”消息替换整个表单,要么用问题填充“错误” div。正在调用成功回调,因此(我认为)没有错误,但是数据仍然为空。 jQuery代码
$(document).ready(function() {
    $(\"input[type=\'submit\']\").click(function(event) {
        event.preventDefault();
        var name = \'#\' + $(this).closest(\'form\').attr(\'name\');
        $.ajax({
        url: \"ajax/index1.PHP\",type: \"POST\",data: $(name).serialize(),success: function(data) {
            alert(data);
            if (data == \'yes\') {
                $(\'#error\').html(data);
            } else {
                $(name).html(data);
            }
        },error: function(jqXHR,textStatus,errorThrown) {
            alert(textStatus);
        }
        });
    });
});
我非常确定成功功能(不是错误一个)正在运行,因为即使删除错误功能,我也会收到警报。另外,如果我删除该警报行,则不会收到任何警报。表单内容被替换为空的div,因此看起来运行顺利。 另外,如果我将\“ alert(data)\”替换为\“ alert(\'hello \')\”,则会显示。因此,数据为空! 如果我尝试直接发布表单(不使用jQuery),则会从PHP页面收到答复-\“请输入您的姓名。请输入您的电子邮件。请输入您的公司。\”或\“谢谢!您的消息已提交。\“ 一切都在同一个域中。 为什么数据为空?在过去的6个小时中,我只是无法解决这个问题。 我尚未设置任何全局ajax设置。在这里发布之前,我也已经按照答案之一和相同的结果-空响应中的建议,对JSON进行了尝试。我也尝试了xml。 index1.PHP具有大量与该网站上其他表单相关的代码。要点:
if (!isset($_POST[\'submit\'])) exit();
if (isset($_POST[\'submit\'])) {
    switch (basename($_SERVER[\'HTTP_REFERER\'])) {
//define required fields,fields to e-mail in the form,success message,form div id...
    }
}
if (is_array($required)) {
    $errors = array();
    foreach ($required as $req) {
        $error = \'\';
        if (empty($_POST[$req])) {
            switch ($req) {
//adjust error message based on name of field...
                    default: $error = \'Please enter your \' . $req . \'.\';
            }
            $errors[] = $error;
        }
    }
}
    if (empty($errors) && is_array($fields)) {
        //decide to which e-mail address to send everything based on the form input
       $headers = \"From: ...\";
       $subject = \"Inquiry\";
    $body = \"The following information was submitted:\\n\\n\";
    foreach ($fields as $a => $b) {
        if (is_array($_POST[$a])) {
            $body .= sprintf(\"%s: %s\\n\",$b,stripslashes(implode(\',\',$_POST[$a])));
        } else {
            $body .= sprintf(\"%s: %s\\n\",stripslashes($_POST[$a]));
        }
    }
    $send = mail($to,$subject,$body,$headers);
    if (!$send) $msg = \'We encountered an error sending your message,please go back and try again. If the problem persists,please call us.\';
}
$error = \'no\';
if (is_array($msg)) {
    $msg = implode(\' \',$msg);
    $error = \'yes\';
}
header(\'Content-type: text/html\');
echo $error . \' \' . $msg;
}
很显然,我会将要回显的最终文本更改为可以被有意义地解析的内容,但是在这一点上,我只是想让某些内容显示在成功回调中。 一个想法-$ _SERVER [\'HTTP_REFERER \']是我的问题吗?我要从原型切换到那里,这不是问题,所以我在这里理所当然。如果是这样,是否有办法识别提交表单的页面? [UPDATE]尝试在$ _SERVER [\'HTTP_REFERER \'] switch语句下添加\“ default \”方案无济于事,所以我想这不是问题。     

解决方法

AJAX的问题在于,您将覆盖默认的Submit按钮操作,因此Submit按钮实际上不会提交数据,执行该操作的Javascript并查看Javascript代码,在调用PHP页面时将永远不会设置
$_POST[\'submit\']
var name = \'#\' + $(this).closest(\'form\').attr(\'name\');
    ...
    data: $(name).serialize(),
仅在此处发送的POST信息是变量
name
,尝试发送带有某些值的with5ѭ字段,您将看到不同的响应。 您还可以检查将ѭ6更改为
die(\'empty submit\')
是否确实在发生。     ,尝试添加
dataType: \"text\"
选项和下面的完整回调以检查您的响应
complete: function(xhr,status) {

        alert(xhr.responseText);    
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...