0

这是我想要实现的部分示例。

我正在尝试从 ajax 检索一个值,但 javascript result.success 变量未定义。我有以下内容:

PHP:

$result = array ("success" => null, "html" => "");
$result['success'] = true;
$result['html'] = "test";
echo json_encode($result);

Javascript/jQuery:

var ID = 1
$.ajax({
            type: 'POST',
            url: '/ajax/load.php',
            contentType: "application/json; charset=utf-8",
            datatype: 'json',
            data: {ID: ID},
            beforeSend: function(xhrObj) {
                xhrObj.setRequestHeader("Content-Type","application/json");
                xhrObj.setRequestHeader("Accept","application/json");
            },
            success: function(result) {
                if (result.success) {
                        // do something
                }
        });

我从 ajax 得到的响应(从 chrome 开发工具中检索)是 {"success":true,"html":"Test"}

这对我来说看起来不错,但是在 JavaScript 中 result.success 是未定义的。我相信这很简单,我只是看不出问题出在哪里..

4

3 回答 3

2

你的错误在这里:

datatype: 'json',

Javascript 区分大小写,属性为dataType

dataType: 'json',

因此,不会告诉 jQuery 自动解析 JSON,因此结果只是被视为 html 或纯文本。

您还需要删除 content-type 标头,因为它指定了请求而不是响应的内容类型。您发送的是请求中编码的表单/url,而不是 JSON。

于 2013-07-05T13:22:37.040 回答
1
$.ajax({
            type: 'POST',
            url: '/ajax/load.php',
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            data: {ID: ID},
            beforeSend: function(xhrObj) {
                xhrObj.setRequestHeader("Content-Type","application/json");
                xhrObj.setRequestHeader("Accept","application/json");
            },
            success: function(result) {
                if (result.success) {
                        // do something
                }
            } // Maybe your forgot this
        });

换句话说 - 基本调试

于 2013-07-05T13:17:40.097 回答
0

在您的 PHP 页面中将其放在页面顶部(您只接受 json 响应,但您的响应标头内容类型可能是 text/html

header('Content-type: application/json');
于 2013-07-05T13:20:38.830 回答