【问题标题】:How to get PHP arrays(several -- looping) from AJAX-request via JSON?如何通过 JSON 从 AJAX 请求获取 PHP 数组(几个 -- 循环)?
【发布时间】:2011-09-15 19:18:28
【问题描述】:

我有一个 javascript,它对启动循环的 PHP 脚本执行 AJAX 请求。此循环将数据返回到 javascript。我希望能够将数组从 PHP 脚本发送回 javascript,但这似乎无法正常工作。

主要是因为它有时会同时返回 2 个(或更多)数组。 我该如何让它工作?尝试搜索 JSON-help 但没有找到任何可以解释我的问题的内容。

在我的 HTTP 响应方法中:

if(http.readyState == 3)
{

      console.log( http.responseText );
      var toBeEvaled = "(" + http.responseText + ")";
      console.log( toBeEvaled );
      var textout = eval( toBeEvaled );

      console.log( textout.name );

}

我的 PHP 看起来像这样:

echo json_encode( array( 'type' => 1, 'name' => $stringVar, 'id' => $id ) );

日志 1 变为:

{"type":1,"name":"String1","id":"1000004"}
{"type":1,"name":"String2","id":"60220"}

如您所见,其中有 2 个数组。 另一个问题是新数组被添加到 http.responseText 上,所以我需要以某种方式摆脱那些我已经处理过的数组,这样我就可以只处理我还没有处理过的新数组。

例如,日志 2 如下所示:

{"type":1,"name":"String1","id":"1000004"}
{"type":1,"name":"String2","id":"60220"}
{"type":1,"name":"String3","id":"5743636"}
{"type":1,"name":"String4","id":"8555983"}
{"type":1,"name":"String5","id":"7732"}
{"type":1,"name":"String6","id":"92257"}

有什么想法吗??

::::编辑::::

解决了!做了以下..

PHP:

echo json_encode( array( 'type' => 1, 'name' => $stringVar, 'id' => $id ) ) . '%#%';

注意末尾的“%#%”。

Javascript:

var lastResponse = '';
function useHttpResponse()
{

    if(http.readyState == 3)
    {

         // Get the original response before we edit it
         var originalResponse = http.responseText;
         // Replace the found last response in our original response with nothing(basically editing out the last response)
         var newResponse = originalResponse.replace( lastResponse, '' );
         // Add our new response to the last response
         lastResponse += newResponse;

         var responses = newResponse.split( "%#%" );
         $.each(responses, function(index, value){

              if( value != '' )
              {

                   var textout = eval( '(' + value + ')' );
                   console.log( 'Name: ' + textout.name + ', ID: ' + textout.id );

              }

        });

    }

}

工作出色! :)

【问题讨论】:

    标签: php javascript ajax arrays json


    【解决方案1】:

    嗯,您正在回显单个 json 块。这就是它不起作用的原因.. 同一输出中的多个 json 块无效,因此任何解释 json 的东西都会出错。相反,将这些数组添加到“主”数组并在脚本末尾输出。例如,

    $array = array();
    while(loop) {
        array_push($array, array( 'type' => 1, 'name' => $stringVar, 'id' => $id ));
    }
    
    echo json_encode($array);
    

    这应该会给你类似...

    [
    {"type":1,"name":"String1","id":"1000004"},
    {"type":1,"name":"String2","id":"60220"},
    {"type":1,"name":"String3","id":"5743636"},
    {"type":1,"name":"String4","id":"8555983"},
    {"type":1,"name":"String5","id":"7732"},
    {"type":1,"name":"String6","id":"92257"}
    ]
    

    哪个有效

    【讨论】:

    • 不幸的是,主 PHP 循环需要大约 7 分钟才能运行,我希望它在 7 分钟后连续发回数据而不是 1 个大“块”。在任何情况下你的解决方案都有效吗?
    • 不幸的是,如果你想连续发回数据,json 可能不是要走的路。这是一个非常结构化的设置,据我所知,它没有任何类型的“正在进行的流”格式。您可能最好使用可以通过 js 读取的自定义格式(即 ----\n$jsondata\n----),(即最后一个 ---\n(data)\n-- --) 然后解码每个块的内容。这有意义吗?
    • 我解决了! :) 编辑了第一篇文章,如果这是一个不好的方法,请随时发表评论。不过它工作得很好。
    • 嘿,我觉得不错。这就是我所说的自定义格式的意思。干得好
    【解决方案2】:

    将你的数组放在另一个数组中,这样你就有了一个二维数组......然后将其设为 json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多