如何从我在这里使用ajax调用的php文件“读取”响应?

时间:2010-11-22 15:03:31

标签: php javascript jquery html ajax

我是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;

 })

由于

6 个答案:

答案 0 :(得分:6)

$.ajax调用的success函数会收到一个参数,通常称为data,但这取决于您,包含响应,所以:

success: function(data) {
    // Use the data
}

(如果你需要,它还会收到一些其他参数; the docs中的更多参数。)

data参数的类型将根据PHP页面发送的响应的内容类型而有所不同。如果它发送HTML,data将是一个包含HTML标记的字符串;如果您的网页发送JSON,则data参数将是已解码的JSON对象;如果是XML,data将是XML文档实例。

如果您愿意,可以使用10(如果您愿意,我可能会将内容类型设置为“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