【问题标题】:Fetching PHP Data with Javascript and assign it to an array使用 Javascript 获取 PHP 数据并将其分配给数组
【发布时间】:2017-11-29 23:15:09
【问题描述】:

我有一个 php 脚本,它从服务器收集数据并将其显示在数组中,然后作为带有函数的 json。

echo json_encode($result);

现在我想用我的 javascript 访问该数组并显示它。它应该作为数组保存在 var 中,所以它应该如下所示:

 data = [ "xxxx" , "ssss",];

但我想我可以简单地将我的函数放入获取数组数据的函数中:

data = myfunction ;

到目前为止我已经尝试过:

 function reqListener () {
     console.log(this.responseText);
         }

        var oReq = new XMLHttpRequest(); //New request object
      oReq.onload = function() {


       };
        oReq.open("get", "http://myserver.com/myscript.php", true);

oReq.send();

function getdata(url) {
jQuery.ajax(
        {
            type: "GET",
            url: "http://myserver.com/myscript.php/",
            dataType: "text",
            success: function (response) {
                var JSONArray = jQuery.parseJSON(response);
                connsole.log(JSONArray);
                }
        });
    }

但似乎没有一个有效,我显示的是“未定义”而不是我的数组。 如果有人对此有一些想法并可以帮助我,那就太好了。

编辑: 由于我们无处可去,这是我的 php 代码:

<?php 
 error_reporting(0);
 $html = file_get_contents("url here");

$dom = new DOMDocument();
$dom->loadHTML($html);

 $tbodyRows = $dom->getElementsByTagName( 'tbody' )
             ->item( 0 ) // grab first tbody
             ->getElementsByTagName( 'tr' );

$result = array();
foreach( $tbodyRows as $tbodyRow )
{
  $result[] = $tbodyRow->getElementsByTagName( 'td' )
                     ->item( 2 ) // grab 3rd column
                     ->nodeValue;
 }


echo json_encode($result);
 ?>

【问题讨论】:

  • 如果在浏览器中打开http://myserver.com/myscript.php,输出是什么?
  • 这是一个数组,然后是 json 编码。首先在我的 php 中,我有 $result = array();在我的脚本结束时,我有 var_dump( $result ); echo json_encode($result);
  • 我问过你关于输出的问题,因为它应该是一个有效的 JSON,所以如果你转到http://myserver.com/myscript.php,你应该会看到类似:{"key":"value"}。如果您有var_dump,那么这可能是导致问题的原因,因为您正在打印类似:array(1) { ["key"]=&gt; string(5) "value" }{"key":"value"} 这不是有效的 JSON
  • 是的,我正在打印您所说的内容。 { ["key"]=> string(5) "value" } 但是使用 echo json_encode 我正在打印正确的数组格式 ["value", "value2"]
  • 阅读我在回答中写的评论

标签: javascript arrays json ajax xmlhttprequest


【解决方案1】:

试试这个代码:

function getdata(url) {
  console.log('Started');
  jQuery.ajax({
    type: "GET",
    url: "http://myserver.com/myscript.php",
    dataType: "text",
    error: function (xhr) {
      console.log('Error',xhr.status);
    },
    success: function (response) {
      console.log('Success',response);
    }
  });
}

打开浏览器的控制台,让我知道它的内容。如果您没有看到 ErrorSuccess,则您的代码实际上并未执行

【讨论】:

  • 好的,控制台中什么都没有,我的代码没有执行。但是我想从 Js 代码中显示的动画有效。只是值没有出现,而是我得到 'undefined' 。我该怎么办?
  • 您似乎没有调用getdata 函数。尝试将getdata(); 放在函数定义之后立即调用它
  • 我认为问题更多在于将 getdata 函数的结果存储到变量中。如果变量是 "chinese" ,那么正确的语法是什么。会是' var chinese = getdata(); ' ?
  • 不,定义的函数getdata 不返回任何内容。如果对http://myserver.com/myscript.php 进行异步调用,则注册errorsuccess 的操作,然后返回。每当服务器响应时,将触发其中一项操作,因此应执行 console.log 语句之一。您可以从脚本中的任何位置调用该函数,甚至可以从控制台调用该函数,只需键入getdata()。我更新了代码,所以有第三个console.log,所以我们可以判断函数是否已经启动
  • 我使用了您的代码,但我的 javascript 存在问题。因为 ajax 是异步的,我希望他们加载同步
【解决方案2】:

我之前做过类似的事情。我会描述它,我希望它会对你有所帮助。

在以下代码 (get_categories.php) 中,我从数据库中检索数据并将它们添加到数组中。然后通过编码为 JSON 将其返回。

$sql = "SELECT category_name FROM category;";
$dataArray = [];
$result = $connection->query($sql);
if ($result) {
    while ($row = $result->fetch_assoc()) {
        $dataArray[] = $row;
    }
    echo json_encode($dataArray);
}

然后在我的Javascript代码中,我可以得到如下数据。

$.ajax({
    url: "/get_categories.php",
    type: "GET",
    dataType: "json",
    success: function (categories) {
        for (var i = 0; i < categories.length; i++) {
            console.log(categories[i]);
        }                
    },
    error: function (jqXHR, textStatus, errorThrown) {
        // Error handling code
    }
});

【讨论】:

  • 我已经通过初始化像$dataArray = ["A","B"];这样的数组再次对其进行了测试。然后像这样访问。 dataType: "json", success: function (categories) { for (var i = 0; i &lt; categories.length; i++) { console.log(categories[i]); } 请注意前面的代码有一个小错误。 categories[i].category_name 应该是 categories[i]
  • 请注意,我已经更正了代码中的错误。
  • 我不知道该怎么办。我已经尝试用你的代码更改我的代码,但我一直得到与以前相同的“未定义”。也许问题不在于数组本身,而在于声明它?我目前有这样的:printing = getdata;
  • 你能发布处理响应的更新函数吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2014-02-23
  • 2011-12-24
  • 2020-03-06
  • 2016-02-12
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多