1

我在 codeigniter 中遇到了 ajax/jquery 的问题。

在 Html 页面中,我有一个按钮,当按下它时,会调用以下处理程序。

按键处理程序:

function postMessage(e) {
    var postUrl = 'http://localhost/myProject/index.php/main/post_message';
    $.ajax({
        type: "POST",
        url: postUrl,
        success: successfulPost,
        dataType: "text"
    });      
}

ajax回调:

function successfulPost(data) {
    data = JSON.parse(data);
    document.write(data[0].hello);
}

控制器内的服务功能:

function post_message() {   
    echo "[{\"hello\":\"world\"}]";
    return;  
}

问题是 JSON.parse() 似乎没有完成他的工作。

这些功能非常简单,所以我开始想也许codeigniter有问题?

编辑:

奇怪的是,如果我将完全相同的 json 字符串放入 JSON.parse() 中,它就会被解析,问题是服务函数何时传递它。

编辑:

计算 json 字符串的字符数,它应该是 13,但我得到 17...

编辑:

我现在认识到,即使正确完成了回显,HTTP 响应的正文中也会出现奇怪的字符……诸如换行符 \0 或制表符之类的东西,有人知道为什么吗?

4

2 回答 2

0

尝试在 PHP 中设置标题:

$data = array("hello" => "world");
header('Content-Type: application/json');
echo json_encode($data);

从 PHP 脚本返回 JSON

于 2013-08-16T21:07:28.683 回答
0

在大多数情况下,在您的 ajax 调用中,您只需要像这样坚持dataType: "JSON"

$.ajax({
    type: "POST",
    url: postUrl,
    success: successfulPost,
    dataType: "JSON"
});

然后在您的控制器中,您只需将普通$_POST数组作为键值对,或者如果您使用的是 codeigniter,您将得到您的$this->input->post('whatever'),无论如何在完成逻辑之后和回显之前,您需要json_encode($data_array)像这样使用:

function post_message()
{
    $data = array();
    $data['hello'] = "world";
    echo json_encode($data);
}

现在你可以这样做:

function successfulPost(data) {
    // data = JSON.parse(data); not needed
    document.write(data.hello);
    // data.hello = world
}
于 2018-12-15T03:40:45.640 回答