如何通过JSON从AJAX请求获取PHP数组(几个循环)?

时间:2011-09-15 19:18:29

标签: php javascript ajax arrays json

我有一个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,所以我需要摆脱那些我已经处理过的数组,这样我才能处理我尚未处理的新数组。

示例,log 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"}

任何想法??

:::: EDIT ::::

解决了!做了以下......

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 );

              }

        });

    }

}

工作出色! :)

2 个答案:

答案 0 :(得分:2)

嗯,你正在回应个别的json块。这就是为什么它不起作用..同一输出中的多个json块无效,所以任何解释json的东西都会转向barf。相反,将这些数组添加到“主”数组并在脚本末尾输出。例如,

$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"}
]

有效

答案 1 :(得分:0)

将你的数组放在另一个数组中,这样你就有了一个二维数组......然后把它变成json