0

JSON を使用して xmlhttp.responseText を解析するにはどうすればよいですか? 解析されたデータを使用してテキストボックスに入力できないようです。loadTextBox.php ファイルの json_encode で使用される b.first および b.second のドット表記で .value および .innerHTML を使用しようとしましたが (以下を参照)、テキスト ボックスに値が入力されません。

メインページのコード:

function loadDoc()
{
   var xmlhttp;

   // code for IE7+, Firefox, Chrome, Opera, Safari
   if (window.XMLHttpRequest)
   {
      xmlhttp=new XMLHttpRequest();
   }
   //code for IE6, IE5
   else
   {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlhttp.onreadystatechange=function()
   {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
         var doc = window.document.createElement("doc");
         var a = xmlhttp.responseText;
         var b = JSON.parse(a);
         document.getElementById("textbox").innerHTML=b.first;
         document.getElementById("textbox2").innerHTML=b.second;
      }
   }

   xmlhttp.open("GET","loadTextBox.php?id=4",true);
   xmlhttp.send();
}

loadTextBox.php コード:

<?php
---Placeholder for correct DB login info---

$result = $mysql->query("SELECT column_one FROM table_one");

while ($row = $result->fetch_object())
{
   $queryResult[] = $row->present_tense;
}
$textboxValue = $queryResult[0];
$textboxValue2 = $queryResult[2];
echo json_encode(array('first'=>$textboxValue,'second'=>$textboxValue2));
?>
4

2 に答える 2

7

私は根本的な問題を理解しました。DB情報ファイルに不要なタグがあったため、余分なタグが送信されていました。これらのタグは、{"first": "radim"、 "second":"radi"}を使用してresponseTextで送信されていました。したがって、---正しいDBログイン情報のプレースホルダー---に関連するコードが間違っていました。また、.innerHTMLを.valueに変更したところ、意図したとおりに機能するようになりました。

メインページのコードが更新されました:

function loadDoc()
{
   var xmlhttp;

   // code for IE7+, Firefox, Chrome, Opera, Safari
   if (window.XMLHttpRequest)
   {
      xmlhttp=new XMLHttpRequest();
   }
   // code for IE6, IE5
   else
   {
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }

   xmlhttp.onreadystatechange=function()
   {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
         var a = JSON.parse(xmlhttp.responseText);
         document.getElementById("textbox").value=a.first;
         document.getElementById("textbox2").value=a.second;
      }
   }

   xmlhttp.open("GET","loadTextBox.php?id=4",true);
   xmlhttp.send();
}
于 2012-09-11T15:37:59.343 に答える
7

これは完全にテストされ、動作します。あなたがやろうとしていることを達成するための出発点として使用してください:

var url = "YOUR.php"

var ajax = new XMLHttpRequest();
ajax.open("GET", url, true);
ajax.send(null);
ajax.onreadystatechange = function () {

     if (ajax.readyState == 4 && (ajax.status == 200)) {

        console.log("ready")            
        var Data = JSON.parse(ajax.responseText);
        console.log(Data);
        console.log(Data.first);

    } else {
        console.log("not ready yet")            
    }
}

これは、JSON出力があなたが述べたように適切にフォーマットされていることを前提としています:

{"first":"radim","second":"radi"} 
于 2012-09-11T02:06:40.783 に答える