我正在使用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所替代,所以它看起来很顺利。
另外,如果我取代“警报(数据)”与不秀“警报(‘你好’)”。所以数据是空的!
如果我尝试直接发布形式(无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", $b, 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']开关语句下添加一个“默认”方案无济于事,所以我猜这不是问题。
whay是在index1.php我可以看到吗? – 2011-04-14 01:51:37
我假设你的提交按钮被称为'submit'?这会在你的AJAX调用中填充吗?如果index1.php正在第一行退出,这将解释空响应。如果你从'if(!isset($ _ POST ['submit']))' – 2011-04-14 03:00:45
我改变了数据:$(name).serialize()到data:$(name).serialize() +'&submit = Submit',现在它工作得很好。谢谢! – Rubin 2011-04-14 03:22:14