最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

How to Pass PHP Array to Javascript as JSON Array - Stack Overflow

matteradmin4PV0评论

Currently I am doing the POST Operation to PHP file from the Javascript to perform the operation in PHP and get the response, But in the php file I am having the Array and I wanted to receive it to JavaScript as JSON Array How Can I do that

Java Script

$scope.details = function() {
  $http({
    method: 'POST',
    url: 'myjson.json'
  }).then(function(response) 
  })

PHP Code

 <?php

header('Content-Type: application/json');
// index.php
// Run the parallel get and print the total time
$s = microtime(true);
// Define the URLs
$urls = array(
  "url1",
  "url2",
  "url3"
);
$pg = new ParallelGet($urls);
//print "<br />total time: ".round(microtime(true) - $s, 4)." seconds";

// Class to run parallel GET requests and return the transfer
class ParallelGet
{
  function __construct($urls)
  {
    // Create get requests for each URL
    $mh = curl_multi_init();
    $headers = array(
    'authorization: Basic xyz',
    'cache-control' => 'no-cache',
    'Accept:application/json'
  );
    foreach($urls as $i => $url)
    {
      $ch[$i] = curl_init($url);
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, 0);
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch[$i], CURLOPT_HTTPHEADER, $headers);
      curl_multi_add_handle($mh, $ch[$i]);
    }

    // Start performing the request
    do {
        $execReturnValue = curl_multi_exec($mh, $runningHandles);
    } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
    // Loop and continue processing the request
    while ($runningHandles && $execReturnValue == CURLM_OK) {
      // Wait forever for network
      $numberReady = curl_multi_select($mh);
      if ($numberReady != -1) {
        // Pull in any new data, or at least handle timeouts
        do {
          $execReturnValue = curl_multi_exec($mh, $runningHandles);
        } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
      }
    }

    // Check for any errors
    if ($execReturnValue != CURLM_OK) {
      trigger_error("Curl multi read error $execReturnValue\n", E_USER_WARNING);
    }

    // Extract the content
    foreach($urls as $i => $url)
    {
      // Check for errors
      $curlError = curl_error($ch[$i]);
      if($curlError == "") {
        $res[$i] = curl_multi_getcontent($ch[$i]);
        //$finalResponse[] = $res[$i]->load();
      } else {
        print "Curl error on handle $i: $curlError\n";
      }
      // Remove and close the handle
      curl_multi_remove_handle($mh, $ch[$i]);
      curl_close($ch[$i]);

    }
    // Clean up the curl_multi handle
    curl_multi_close($mh);
      //print_r($res);
    $responseArray = $res;
    // Print the response data

  $responseMSO = json_encode($res);
//print_r(utf8_encode(json_encode($res)));
  //echo $finalResponse[1];
  //echo $responseMSO;
  }

}
?>

Now I want to send these to Javascript as JSONArray

I have seen the suggestion to use json_encode in PHP but when I use that I am getting response as utf-encoded.

Any one please help here

I have referred all the below but didn't help much

Link 1

Link 2

Currently I am doing the POST Operation to PHP file from the Javascript to perform the operation in PHP and get the response, But in the php file I am having the Array and I wanted to receive it to JavaScript as JSON Array How Can I do that

Java Script

$scope.details = function() {
  $http({
    method: 'POST',
    url: 'myjson.json'
  }).then(function(response) 
  })

PHP Code

 <?php

header('Content-Type: application/json');
// index.php
// Run the parallel get and print the total time
$s = microtime(true);
// Define the URLs
$urls = array(
  "url1",
  "url2",
  "url3"
);
$pg = new ParallelGet($urls);
//print "<br />total time: ".round(microtime(true) - $s, 4)." seconds";

// Class to run parallel GET requests and return the transfer
class ParallelGet
{
  function __construct($urls)
  {
    // Create get requests for each URL
    $mh = curl_multi_init();
    $headers = array(
    'authorization: Basic xyz',
    'cache-control' => 'no-cache',
    'Accept:application/json'
  );
    foreach($urls as $i => $url)
    {
      $ch[$i] = curl_init($url);
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, 0);
      curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch[$i], CURLOPT_HTTPHEADER, $headers);
      curl_multi_add_handle($mh, $ch[$i]);
    }

    // Start performing the request
    do {
        $execReturnValue = curl_multi_exec($mh, $runningHandles);
    } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
    // Loop and continue processing the request
    while ($runningHandles && $execReturnValue == CURLM_OK) {
      // Wait forever for network
      $numberReady = curl_multi_select($mh);
      if ($numberReady != -1) {
        // Pull in any new data, or at least handle timeouts
        do {
          $execReturnValue = curl_multi_exec($mh, $runningHandles);
        } while ($execReturnValue == CURLM_CALL_MULTI_PERFORM);
      }
    }

    // Check for any errors
    if ($execReturnValue != CURLM_OK) {
      trigger_error("Curl multi read error $execReturnValue\n", E_USER_WARNING);
    }

    // Extract the content
    foreach($urls as $i => $url)
    {
      // Check for errors
      $curlError = curl_error($ch[$i]);
      if($curlError == "") {
        $res[$i] = curl_multi_getcontent($ch[$i]);
        //$finalResponse[] = $res[$i]->load();
      } else {
        print "Curl error on handle $i: $curlError\n";
      }
      // Remove and close the handle
      curl_multi_remove_handle($mh, $ch[$i]);
      curl_close($ch[$i]);

    }
    // Clean up the curl_multi handle
    curl_multi_close($mh);
      //print_r($res);
    $responseArray = $res;
    // Print the response data

  $responseMSO = json_encode($res);
//print_r(utf8_encode(json_encode($res)));
  //echo $finalResponse[1];
  //echo $responseMSO;
  }

}
?>

Now I want to send these to Javascript as JSONArray

I have seen the suggestion to use json_encode in PHP but when I use that I am getting response as utf-encoded.

Any one please help here

I have referred all the below but didn't help much

Link 1

Link 2

Share Improve this question edited Sep 3, 2017 at 18:05 Mahesh G asked Sep 3, 2017 at 17:50 Mahesh GMahesh G 1,2766 gold badges33 silver badges63 bronze badges 7
  • "I am getting response as utf-encoded" and why is that a problem? Are you using some other type of encoding? – Patrick Evans Commented Sep 3, 2017 at 17:52
  • 1 It's just echo json_encode($myarray) in your PHP – adeneo Commented Sep 3, 2017 at 17:53
  • can you show us the code through which you are getting this $myarray – Death-is-the-real-truth Commented Sep 3, 2017 at 17:56
  • Hi Batman. your json format was wrong. Please copy and paste json data into this url to check your json data jsonformatter.curiousconcept. – jvk Commented Sep 3, 2017 at 17:57
  • I have made my json very simplied to make it easy. I will put the way its showing when I am using json_encode – Mahesh G Commented Sep 3, 2017 at 17:57
 |  Show 2 more ments

3 Answers 3

Reset to default 3

Try this:

<?php 

$myarray = array('{ "name":"中", "age":30, "car":null }','{ "name":"Mike", "age":32, "car":null }');
foreach ($myarray as $array) {
    $arrays[] = json_decode($array);
}

echo json_encode($arrays, JSON_UNESCAPED_UNICODE);
echo '<br>';
echo json_encode($arrays);

?>

As you can see the first sample has unescaped unicode

OUTPUT:

[{"name":"中","age":30,"car":null},{"name":"Mike","age":32,"car":null}] [{"name":"\u4e2d","age":30,"car":null},{"name":"Mike","age":32,"car":null}]

Now I want to send these to Javascript as JSONArray like below

[{ "name":"John", "age":30, "car":null },{ "name":"Mike", "age":32, "car":null }]

OK so set up php array first:

$myarray = array(
        array(
            'name' => 'John',
            'age'  => 30,
            'car'  => null
        ),
        array(
            'name' => 'Mike',
            'age'  => 32,
            'car'  => null
        )
);

then json encode it in php

echo  json_encode($myarray);

Result:[{"name":"John","age":30,"car":null},{"name":"Mike","age":32,"car":null}]

For more details on proper way to send a json response from php using json take a look at this: Returning JSON from a PHP Script

If you wish to convert an array of objects in PHP and have it JSON-encoded so that JavaScript can use the result, here's one way to acplish that feat:

<?php


$o = new stdClass;
$o->name = "John";
$o->age = 30;
$o->car =null;

$o2 = new stdClass;
$o2->name = "Mike";
$o2->age = 32;
$o2->car =null;

$myarray = [$o, $o2];

var_dump(json_encode($myarray));

// result:
 "[{"name":"John","age":30,"car":null},{"name":"Mike","age":32,"car":null}]"

see example here.

For the json-encoded PHP array of objects to be useful for JavaScript it needs to be enclosed in single quotes and then parsed with JSON, as follows:

<script language="JavaScript">
var obj = JSON.parse('<?php echo json_encode($myarray) ?>');
console.log(obj[0].name + "\t" + obj[1].name); // John   Mike
</script>

See useful resource here and this discussion.

Post a comment

comment list (0)

  1. No comments so far