【问题标题】:Can't get json data from jQuery ajax call无法从 jQuery ajax 调用中获取 json 数据
【发布时间】:2013-10-20 09:46:20
【问题描述】:

我正在尝试通过 jQuery ajax 调用从 data.php 获取数据。

我的代码如下所示:

var jsonData;

$.ajax({
        url: 'data.php',
        success: function(response) {
            jsonData = response;
        }
});

我的data.php 文件正在返回 json 格式的数据,但某些文本是 Unicode 格式。 我在 data.php 和我的 javascript 文件上设置了字符集,但仍然无法访问响应的数据对象。

有什么想法吗?

【问题讨论】:

  • 您是否尝试在调用$.ajax() 后立即访问您的jsonData 变量?那时它将是undefined,因为您的ajax 调用是异步的。在 success 处理程序中进行处理。 (如果不是这样,请单击“编辑”并添加有关“无法访问”在这种情况下的实际含义的详细信息。您的 response 变量中的实际结果是什么?)

标签: javascript jquery ajax json


【解决方案1】:

尝试在你的ajax调用中加入dataType: 'json'

var jsonData;

$.ajax({
        url: 'data.php',
        dataType: 'json',
        success: function(response) {
            jsonData = response;
        }
});

【讨论】:

    【解决方案2】:

    你也可以使用这个机制:

    $.getJSON( "data.php", function( response ) {
        jsonData = response;
    });
    

    如果你只想获取 JSON 会更干净 :)

    【讨论】:

    • hmmm.. 甚至不知道该功能存在.. 很高兴知道 :)
    【解决方案3】:

    您应该在PHP 中使用header() 函数来设置正确的响应标头(内容类型和字符集):

    header('Content-type: application/json; charset=UTF-8');
    

    您还应该在 HTML 页面的顶部重复此操作:

    <meta http-equiv="Content-type" value="text/html; charset=UTF-8" />
    

    另请参阅:

    PHP UTF-8 cheatsheet

    【讨论】:

      【解决方案4】:

      PHP

      try {
          $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
          $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          $dbh->query('SET NAMES utf8;');
          $stmt = $dbh->prepare($sql);  
          //$stmt->bindParam("id", $_GET[id]);
          $stmt->execute();
      
          $advice = $stmt->fetchAll(PDO::FETCH_OBJ);
          $dbh = null;
          echo '{"items":'. json_encode($advice) .'}'; 
      } catch(PDOException $e) {
          echo '{"error":{"text":'. $e->getMessage() .'}}'; 
      }
      

      阿贾克斯

       var temp;
          $.ajax({
                  type: "POST",
                  contentType: "application/json; charset=utf-8",
                  url: serviceurl,
                  data: "{'userName':'" + userName + "' , 'password': '" + password                                   
                         + "'}",
                  dataType: "json",
                  success: function(msg) {
                                  temp = jQuery.parseJSON(msg.d);
                                },
                  error: function(xhr, ajaxOptions, thrownError) {}
      
              });
      

      【讨论】:

        【解决方案5】:

        数据.php

        header('Content-type: application/json'); 
        

        $.ajax({
                url: 'data.php',
                dataType: 'json',
                success: function(response) {
                    jsonData = response;
                }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-11
          • 1970-01-01
          • 1970-01-01
          • 2020-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多