【问题标题】:How to get and display datas after encoded Json?编码Json后如何获取和显示数据?
【发布时间】:2011-11-04 04:21:07
【问题描述】:

我正在尝试从 jquery/ajax 传递用户输入,但在使用 json_encode() 方法 PHP 端时无法从服务器获取任何数据。在不使用 Json 之前一切正常。我有点困惑如何获取和显示数据结果。我必须将其解码回来吗?

jQuery 代码:

$(document).ready(function() {

    $('#keyword').keyup(function(event) {
        event.preventDefault();

        // Get input form
        var keyword = $('#keyword').val();
        var path = "<?php echo site_url('controller/suggestion'); ?>";

            $.ajax({
                url: path,
                type: "POST",
                data: { search: keyword },
                success: function(data) {
                    console.log('>> Data: ', data);
                }
            });
        }
    }); 

PHP 控制器:

public function suggestion() {
    // Get the keyword from Ajax request
    $keyword = strip_tags($this->input->post('search'));

    if (isset($keyword) && !empty($keyword)) {
        echo '>> Search Keyword: '. $keyword;
        $this->tabResults = json_encode($this->model->findKeyword($keyword, 5));

        //print_r($this->tabResults);
        $data['searchResults'] = $this->tabResults;
        $this->load->view('results', $data);
    }
}

HTML:

<div id="container">
    <div id="header">

        <div class="search">
            <form id="myform" method="post" action="film_controller/test">
                <input type="text" name="keywordsearch" id="keyword">
                <input type="submit" name="search" value="Search">
            </form>
            <div id="suggestionResult"></div>
        </div>

    </div>
</div>

我正在尝试添加 dataType: "json" 并设置 data.searchResults;

我在 Firebug 控制台中遇到错误: "更新语法错误:200 "JSON.parse: 意外字符数据..."

$.ajax({
                url: path,
                type: "POST",
                data: { search: keyword },
                dataType: "json",
                success: function(data) {
                    console.log('>> Data: ', data.searchResults);
                },
                error:function (xhr, textStatus, thrownError){
                    console.log(">> Update Error Status: ", xhr.status, "Error Thrown: ", thrownError);
                }       
            });

在我的控制器中:

    public static $tabResults = array();

public function __construct() {
    parent::__construct();

    $this->tabResults = self::$tabResults;
}
public function suggestion() {
    // Get the keyword from Ajax request
    $keyword = strip_tags($this->input->post('search'));

    if (isset($keyword) && !empty($keyword)) {
        echo '>> Search Keyword: '. $keyword;
        $this->tabResults = json_encode($this->film_model->findKeyword($keyword, 5));

        print_r($this->tabResults);
        $data['searchResults'] = $this->tabResults;
        $this->load->view('results', $data);
    }
}

【问题讨论】:

  • JSON 只是一种使用 (J)ava(S)cript (O)bject (N)otation 将原生数据结构封装成纯字符串的方法。您的 PHP 数据结构被转换为 JSON 字符串,jquery 将为您转换为原生 Javascript 等效结构。
  • PHP 数据结构 ($this->tabResults) 在 HTML 文件中转换为 Json 字符串后如何调用它?

标签: php codeigniter jquery


【解决方案1】:

jquery $_ajax() 函数中有dataType 属性。您必须将其设置为 json。

如果你这样设置,结果将是对象的形式。因此,您必须访问类似的对象。(即数据。[您从服务器端发送的文本])。

以下网址可能对你有帮助。

http://api.jquery.com/jQuery.ajax/

如果您对此仍有疑问,请告诉我..

【讨论】:

  • 同意,好点。此外,服务器响应应该类似于 return print(json_encode((object) array('tabResults' =&gt; $this-&gt;model-&gt;findKeyword($keyword, 5)))); 在这种情况下 qpixo 可以得到 data.tabResults
  • 嘿,我找到了一种使用 $this->output->set_output(json_encode(...));但是当没有数据时,我想添加一条自定义错误消息。在 Jquery 中我应该在哪里添加它?我很难弄清楚这一点。
  • 他们就是这样,你可以像这样设置 json_encode(array('status'=>0)) 一个状态和另一个 json_encode(array('status'=>1)) 你可以在 js 中检查它并在 js 中添加您的自定义消息..!
【解决方案2】:

如果你想返回 json 数据,你不需要加载视图。只需返回 json 编码的数据。

if (isset($keyword) && ! empty($keyword))
{
    $this->tabResults = json_encode($this->model->findKeyword($keyword, 5));

    if ($this->input->is_ajax_request())
    {
        return print $this->tabResults;
    }

    $data['searchResults'] = $this->tabResults;
    $this->load->view('results', $data);
}

【讨论】:

  • 那么如何在 Jquery 中调用 $this->tabResults 呢?成功:函数(数据){console.log('>>数据',data.tabResults); } 不起作用 Firebug 显示数据:未定义
  • 您的 AJAX 调用看起来不错。但是你返回的是一个字符串,而不是一个对象。所以只需检查 console.log('>> Data', data);
  • 实际上我正在返回一个数组($this->tabResults)。调用 console.log("Data: ", data); 时我没有得到任何回复有点怪!我做错了什么?
  • 是的,但是当您将 json_encode 应用于数组时,它会转换为字符串。正如 Sakthi 所说,设置 dataType=json 并且服务器响应应该类似于return print(json_encode((object) array('tabResults' =&gt; $this-&gt;model-&gt;findKeyword($keyword, 5)))); 在这种情况下,您将获得data.tabResults。一般来说,您的所有步骤看起来都不错。
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多