jQuery Ajax响应

3

如何正确地获取 PHP 对 Ajax 请求的响应?

以下是 JQuery 代码:

$('#quote-form').submit(function(e) {
    e.preventDefault();
    $.ajax({
        type: 'POST',
        data: $(this).serialize(),
        dateType: 'json',
        url: 'mail.php',
        success: function(data) {
            alert(data.msg);
        }
    });

    return false;
});

PHP代码 mail.php:

// Some mail functions here

$mailSent = @mail($to, $subject, $message, $headers); 
$return['msg'] = $mailSent ? 'mail sent' : 'mail failure';  
echo json_encode($return);

我尝试警告响应alert(data.msg),但它显示为未定义。有什么想法吗?


请查看您可用的任何开发人员工具,以查看返回的请求。如果您到达“警报”(alert),则请求返回正常。您只需要检查“data”的外观(在Chrome中执行console.log(data)以查看它)。 - Jonathon Bolster
你可以尝试一下alert(data)吗? :) - Marco Johannesen
成功后,您需要使用 .parseJSON() 解析您的 JSON 或尝试使用 .getJSON() 代替 .ajax() - JMax
我已经检查了响应选项卡,它显示:(一个空字符串) - Turtel
@JMax - 你不必使用那两个中的任何一个。你所需要做的就是指定 dataType: 'json',而他打错了,写成了 dateType - N.B.
3个回答

6
除了其他我还没有测试过的东西,但我只看到在您的ajax选项中有一个错拼:
dateType: 'json'

将其更改为:

dataType: 'json'

应该可以了 ^_^ 他比我先到了那里 xD - DarkMantis
今天早上你的眼睛比我更敏锐! :) - Jonathon Bolster
哇,我没看到那个。谢谢!不过还有另一个问题。现在它说“data”为空。 - Turtel
1
使用浏览器控制台并检查您获得的原始响应。如果响应看起来不像JSON,但包含来自PHP的警告或其他内容-您将知道该怎么做。 - N.B.

0
你尝试过设置头部返回 JSON 吗? 这样 jQuery 就知道你返回的是 JSON。
header('Content-type: application/json');

兄弟,我认为它没有必要。 - Awais Qarni

0
首先按照Kavousi提到的,更改datatype的拼写。然后在你的响应中解析传入的数据,就像这样实现:
  var response = obj = JSON.parse(data);
  alert(response.msg);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接