0

I am passing the posts result of a query to JS so it can render the data in a select. Before I send out the result like this:

return new \WP_REST_Response( $return_data, 200 );

I checked the array in PHP an it yields the following, which is fine (sorted by name)

array(8) {
  [1489]=>
  string(3) "Gus"
  [1499]=>
  string(3) "Mia"
  [1479]=>
  string(4) "Odin"
  [1488]=>
  string(5) "Pablo"
  [1490]=>
  string(8) "Salvator"
  [1491]=>
  string(6) "Scooby"
  [1492]=>
  string(5) "Snowy"
  [1485]=>
  string(6) "Wesley"
}

In my JS, I have the following code:

this.request = $.ajax({
  url: `${homeURL}/wp-json/mdr/v1/${animalType}`,
  type: 'get',
  dataType: 'json',
  success: function (result) {
    console.log(result);

Which prints the following:

Object {
  1479: "Odin",
  1485: "Wesley",
  1488: "Pablo",
  1489: "Gus",
  1490: "Salvator",
  1491: "Scooby",
  1492: "Snowy",
  1499: "Mia"
}

Why is the array converted to an object sorted by the ID instead of the order that I passed it from PHP?

1 Answer 1

0

Fix by using:

return new \WP_REST_Response( \json_encode( $return_data), 200 );
1
  • 2
    WP_REST_Response should automatically convert to JSON. If you're only concerned about the values, return new \WP_REST_Response(array_values($return_data), 200); should be an alternate solution. Commented Jun 7, 2021 at 6:30

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.