我是ajax和jquery的新手,但我在网上遇到了一个代码,我正在操作以满足我的需求。
唯一的问题是我希望能够从PHP响应ajax。
这个ajax POSTS到一个php页面(email.php)。
如果邮件已发送或超出邮件限制,我如何回复email.php回复(我限制每个用户发送的邮件的数量)?
换句话说,我希望ajax从php代码中取1或0,例如:
if(response==1){ alert("message sent"); } else { alert("Limit exceeded"); }
以下是代码的最后一部分:(如果您需要完整代码,请告诉我)
var data_string = $('form#ajax_form').serialize();
$.ajax({
type: "POST",
url: "email.php",
data: data_string,
success: function() {
$('form#ajax_form').slideUp('slow').before('');
$('#success').html('<h3>Success</h3>Your email is has been sent.');
}//end success function
}) //end ajax call
return false;
})
由于
答案 0 :(得分:6)
$.ajax
调用的success
函数会收到一个参数,通常称为data
,但这取决于您,包含响应,所以:
success: function(data) {
// Use the data
}
(如果你需要,它还会收到一些其他参数; the docs中的更多参数。)
data
参数的类型将根据PHP页面发送的响应的内容类型而有所不同。如果它发送HTML,data
将是一个包含HTML标记的字符串;如果您的网页发送JSON,则data
参数将是已解码的JSON对象;如果是XML,data
将是XML文档实例。
如果您愿意,可以使用1
或0
(如果您愿意,我可能会将内容类型设置为“text / plain”),因此:
success: function(data) {
if (data === "1") {
// success
}
else if (data === "0") {
// failure
}
else {
// App error, expected "0" or "1"
}
}
...但是当我响应Ajax请求时,我发回JSON九次(所以我将Content-Type
标头设置为application/json
),因为如果我是使用像jQuery这样理解JSON的库,我会找回一个易于使用的有序的有序对象。我不是PHP人员,但我相信你会通过setContentType
设置内容类型并使用json_encode
对要发送回的数据进行编码。
在你的情况下,我可能回复:
{"success": "true"}
或
{"success": "false", "errMessage": "You reached the limit."}
以便服务器端代码可以指示我向用户显示的错误消息。那么你的success
函数将如下所示:
success: function(data) {
var msg;
if (typeof data !== "object") {
// Strange, we should have gotten back an object
msg = "Application error";
}
else if (!data.success) {
// `success` is false or missing, grab the error message
// or a fallback if it's missing
msg = data.errMessage || "Request failed, no error given";
}
if (msg) {
// Show the message -- you can use `alert` or whatever
}
}
答案 1 :(得分:2)
您必须将参数传递给“成功”函数。
success: function(data)
{
if(data == '1')
{
$('form#ajax_form').slideUp('slow').before('');
$('#success').html('<h3>Success</h3>Your email is has been sent.');
}
}
在你的php文件中,你应该回应你需要的响应
if(mail())
{
echo '1';
}
else
{
echo '0';
}
答案 2 :(得分:1)
您在php文件中回显或返回的任何内容都将被发送回您的jquery帖子。您应该查看此页面http://api.jquery.com/jQuery.post/并考虑使用JSON格式的变量返回,如果您在电子邮件脚本中有这样的话:
echo'{“reposonse”:“1”}';
这会将一个名为response的变量传递给您的jquery脚本,值为1。然后,您可以使用if语句描述。
答案 3 :(得分:0)
让email.php回显0或1,然后抓取ajax对象成功事件中的数据,如下所示......
$.ajax({
url: 'email.php',
success: function(data) {
if (data=="1"){
...
}else{
...
}
}
});
答案 4 :(得分:0)
你做的是,你让你的ajax文件(email.php)如果成功则打印1,如果不成功则打印0(或者你想要的任何其他内容)
然后,在您的成功函数中,您执行以下操作:
功能(数据){
$('form#ajax_form').slideUp('slow').before('');
if(data==1){ alert("message sent"); } else { alert("Limit exceeded"); }
$('#success').html('<h3>Success</h3>Your email is has been sent.');
}
因此,您可以捕获函数的data var中的响应。如果您的输出中有更多种类,可以将dataType设置为“json”并让您的php文件打印一个json_encoded字符串,以便您可以通过例如data.success等访问响应中的不同变量。
答案 5 :(得分:0)
PHP只能通过其输出返回AJAX调用。对PHP页面的AJAX调用与请求页面的浏览器基本相同。
如果您的PHP文件类似,
<?php
echo "1";
?>
您将在JavaScript成功回调中收到“1”,
即
success: function(data) {
// here data is "1"
}
作为补充说明,通常AJAX响应通常以JSON格式完成。因此,您应该使用JSON表示法格式化PHP replies 。