简单的 JSON 代码不起作用

Simple JSON code doesn't work

本文关键字:不起作用 代码 JSON 简单      更新时间:2023-09-26

此代码尝试使用值填充窗体中的下拉列表。我已经单独测试了 PHP,查询还可以(难怪!我有一个类似的表单,有 3 个连接的下拉列表,它们完美运行。在Mozilla中调试它,我注意到JSON的成功函数没有执行。我不明白为什么。

JavaScript

$(document).ready(function()
   {
   $.getJSON("/scripts/033A_GetJudet.php", success = function(data)
      {
      var str_options = "";
      for (var i=0; i < data.length; i++)
          {
          str_options += "<option value='" + data[i] + "'>" + data[i] + "</option>";
          }
      $("#selJudet").append(str_options);
//      var selOption = document.getElementById("selJudet");
//      selOption.selectedIndex = localStorage.getItem("selJudIndex") || 0;
//      document.getElementById("selJudet").selectedIndex = selOption.selectedIndex;
      $("#selJudet").change();
      });
   $("#selJudet").change(function()
    {
    var selText = document.getElementById("selText");
//    selText.value = selText.defaultValue;
    selText.value = "Abcgcfkjsdhfsjkdh";
//    $("#selText").change();
    });
});

PHP(我跳过了数据库连接代码)

$query = '(SELECT 1 AS sc, nume_judet FROM sa_Judet ';
$query .= 'WHERE nume_judet <> "N/A" ) UNION ';
$query .= '(SELECT 2 AS sc, "N/A" FROM sa_Judet) '; 
$query .= 'ORDER BY sc, nume_judet';
//print $query;
$result = mysqli_query($db_conn, $query);
$judet = array();
if ($result == FALSE)
   {
   array_push($judet, 'QUERY_ERROR');
   goto _adr1;
   }
$rows = mysqli_num_rows($result);
if ($rows == 0)
   {
   array_push($judet, 'TBD_');
   goto _adr1;
   }
while ($row = mysqli_fetch_array($result))
      {
      array_push($judet, $row['nume_judet']);
      }
_adr1:
print json_encode($judet);
mysqli_free_result($result);
mysqli_close($db_conn);   
?>

我原始Javascript的Ajax变体

$(document).ready(function()
   {
   $.ajax({
   url: "/scripts/033A_GetJudet.php",
   dataType: 'json',
   success: function(data) 
     {console.log('SUCCESS: ', data);},
   error: function(data) 
     {console.log('ERROR: ', data);}
   var str_options = "";
   for (var i=0; i < data.length; i++)
       {
       str_options += "<option value='" + data[i] + "'>" + data[i] + "</option>";
       }
   $("#selJudet").append(str_options);
   var selOption = document.getElementById("selJudet");
   selOption.selectedIndex = localStorage.getItem("selJudIndex") || 0;
   document.getElementById("selJudet").selectedIndex = selOption.selectedIndex;
   $("#selJudet").change();
   });
   $("#selJudet").change(function()
      {
      var selText = document.getElementById("selText");
      selText.value = selText.defaultValue;
//      $("#selText").change();
      });
});   
解析

接收到的数据时可能是错误。HTTP 304 与 HTTP 200 相同,只是内容是从缓存中提取的,而不是从服务器端提取的。

$.ajax({
  url: url,
  data: data,
  success: function(response, textStatus, jsqxhr) {
     var obj; try { obj = eval(response); } catch(e) { console.error(e); }
     // -- do something with obj --
  },
  fail: function(jqxhr, textStatus, error) {
     console.log( "error", textStatus, error);
  }
});

请改用此函数并仔细查看数据。如果数据是通过 success 返回的,我们尝试将 json 字符串计算到一个对象中。如果失败,则会引发异常(可能是语法错误),日志应显示此异常。

替换此行

$.getJSON("/scripts/033A_GetJudet.php", success = function(data)

有了这个

$.getJSON("/scripts/033A_GetJudet.php", function(data)