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

7
  • "I am getting response as utf-encoded" and why is that a problem? Are you using some other type of encoding? Commented Sep 3, 2017 at 17:52
  • 1
    It's just echo json_encode($myarray) in your PHP Commented Sep 3, 2017 at 17:53
  • can you show us the code through which you are getting this $myarray 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.com 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 Commented Sep 3, 2017 at 17:57

3 Answers 3

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

Sign up to request clarification or add additional context in comments.

4 Comments

Okay Micheal let me try and update you thanks..I am issue with server now will test and update back once it is up..
I have tried this but , In the JS Console I am getting proper response {"status":{"1":{"id":1,"color":"#75B000","description":"Test was executed and passed successfully.","name":"PASS"} But When Just run the standalone PHP page I am getting ["{\"status\":{\"1\":{\"id\":1,\"color\":\"#75B000\",\"description\":\"Test was executed and passed successfully.\",\"name\":\"PASS\"},
Seems like your curl_multi_getcontent($ch[$i]) is already in json format. Convert that to array first to avoid double encoding phpwin.org/s/J2LabK
Perfect thanks for really making understand with this example :)
1

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

4 Comments

["{\"status\":{\"1\":{\"id\":1,\"color\":\"#75B000\",\"descr‌​iption\":\"Test was executed and passed successfully.\" I am getting this for each I am getting \ symbol not sure why. Where As I should be getting only ["{"status":{"1":{"id":1,"color":"#75B000","descr‌iption":"T‌​est was executed and passed successfully."
in json_encode pass in a second param json_encode($myarray, JSON_UNESCAPED_SLASHES)
I have tried this but , In the JS Console I am getting proper response {"status":{"1":{"id":1,"color":"#75B000","description":"Test was executed and passed successfully.","name":"PASS"} But When Just run the standalone PHP page I am getting ["{\"status\":{\"1\":{\"id\":1,\"color\":\"#75B000\",\"descr‌​iption\":\"Test was executed and passed successfully.\",\"name\":\"PASS\"},
create a phpfiddle to see what you are doing
1

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 accomplish 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.

2 Comments

["{\"status\":{\"1\":{\"id\":1,\"color\":\"#75B000\",\"descr‌​iption\":\"Test was executed and passed successfully.\" I am getting this for each I am getting \ symbol not sure why. Where As I should be getting only ["{"status":{"1":{"id":1,"color":"#75B000","descr‌iption":"T‌​est was executed and passed successfully."
@Batman please take a look at my updated example code with respect to how to use the json-encoded PHP array of objects in JavaScript; this should now work for you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.