简单的JSON代码不起作用

时间:2016-02-29 08:54:30

标签: javascript php json

此代码尝试使用值填充表单中的下拉列表。我已经单独测试了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();

      });

});   

2 个答案:

答案 0 :(得分:0)

解析收到的数据可能是错误的。 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字符串计算为对象。如果失败,则抛出异常(可能是SyntaxError),log应显示此内容。

答案 1 :(得分:-2)

替换此行

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

这一个

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