在Javascript中解析时将PHP转换为JSON数组

时间:2015-05-12 00:56:24

标签: javascript php mysql json

因此,为了创建具有动态HTML的页面,使用了以下Javscript代码:

function add0(Text, Value){ 
 var x = document.getElementById("thingy");
var option = document.createElement("option");
option.text = Text;
option.value = Value;
x.add(option);}
function add(Text, Value){ 
var x = document.getElementById("stuff");
var option = document.createElement("option");
option.text = Text;
option.value = Value;
x.add(option);}
var c = 0;
var value =<?php echo json_encode($ToAndFromR); ?>;
var formula = <?php echo json_encode($FormulaR); ?>;
while(c < <?php echo $countr ?>){
add0(value[c], formula[c]);
add(value[c], formula[c]);

c++;

}

这是在从SQL查询中收到$ToAndFromR$Formula之后完成的,其中代码为:

$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//declare variables
$countr = null;
$sql = "SELECT * FROM `convert`";
$drippage = mysqli_query($conn, $sql); 
//this counts the number of rows
if (mysqli_num_rows($drippage)) {
    $countr = mysqli_num_rows($drippage);
}
$ToAndFrom = mysqli_query($conn, "SELECT ToAndFrom FROM `convert`");
$ToAndFromR = null;
$ToAndFromR = mysqli_fetch_all($ToAndFrom, MYSQLI_BOTH);

$FormulaR = null;
$Formula = mysqli_query($conn, "SELECT Formula FROM `convert`");
$FormulaR = mysqli_fetch_all($Formula, MYSQLI_BOTH);

但是,HTML在下拉列表中显示为[object Object],而不是使用常规PHP数组时的实际值。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

传递给JavaScript函数的每个TextValue都将是一个具有两个属性的对象(因为您正在使用MYSQLI_BOTH获取模式),例如

{"0": "some value", "ToAndFrom": "some value"}

您尝试将此内容分配给option的{​​{1}}和text媒体资源。

当你应该运行一个查询时,你似乎也在运行三个查询。

value

并在您的JavaScript中

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8');

$result = $conn->query('SELECT `ToAndFrom` AS `text`, `Formula` AS `value` FROM `convert`');
$options = $result->fetch_all(MYSQLI_ASSOC);

此外,您可以通过简单地传递var options = <?= json_encode($options) ?>; for (var i = 0, l = options.length; i < l; i++) { add0(options[i].text, options[i].value); add(options[i].text, options[i].value); } ID来减少几乎相同的JavaScript函数add0add,例如

<select>

function add(selectId, text, value) {
    var x = document.getElementById(selectId);
    // and so on
}

答案 1 :(得分:0)

我认为你应该编写一个单独的PHP脚本来回显JSON。

然后在javascript中,你应该调用这个PHP并解析JSON。一个简单的代码:

  var xhr = new XMLHttpRequest();
        xhr.open("GET", "sql.php", true);

        var htmltext= '';
        xhr.onload = function (e) {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    var jsoninfo = xhr.responseText;
                    var obj = JSON.parse(jsoninfo);
                    // text = obj.attribute;
                    // add0(text,formula[c])
                   }
       }
}