Blessan Kurien
Blessan Kurien

Reputation: 1665

json_decode php ajax :Invalid argument supplied foreach

Here is my sample json string data

[{"ratetype":"Y","hotelPackage":"N","roomtype":"Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000015468","ratePlanCode":"0000120709","ratebands":{"validdays":"1111111","wsKey":"fOnrQW3wP9U6eaST9cxEwNldIVM6N6LdxDrDapJ4gq4xUB8SLli5fMQ6w2qSeIKuoaZbT2or8tYkqYfjzPL9wNTRsJN40fffmk9s1Uz6PbbEOsNqkniCrsHjlG4I7MKBayEyj9KbhxGqp8tN23vC5K+lzg+CLhCVc4A727IY+8t1uCj9hv8OAqYPqiatWpH/7ANOsUaHXl4UGSHhnwqssBs1/1meUilvdkgIrhy7u2+1TW+z1jMN3+lQQ1KvLvexxDrDapJ4gq7WpqakyUIlysQ6w2qSeIKu5a8gxPgjph7EOsNqkniCrumRpycuiwkwcJ1QcdikvX8AIeS1LF1SedADwU6eU9IaCaZCAig5yMBccvSRKT+W+ZsfPoLN5c0IliYMwnHbAfXwhKi3O/+L9SyeKeLupHtA9S+XKwz97LvEOsNqkniCrvIh6xV3cNuuKS12MjOBUQSs4y2qNXPFKw==","extGuestTotal":"0","roomTotal":"4350","servicetaxTotal":"466","discount":"385.0","commission":"0","originalRoomTotal":"3965"}},{"ratetype":"Y","hotelPackage":"N","roomtype":"Super Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000017101","ratePlanCode":"0000120713","ratebands":{"validdays":"1111111","wsKey":"mPRyZ7i+l3d9YkBTbyd4CsQ6w2qSeIKubc0g8TGBVVSbBYEQK7zdOgbJJqjW5wOwiG065xYCyu+vVu5bgidY3mfECYFCkMSIn4KACQv3zPbHDVCqduGZ/cYclnMQGbwGDufqO8lYtnyH9KjpH

Here is the ajax request

$.ajax({
          url:'session.php',
          data:{userdata:JSON.stringify(data)},
          method:"POST",
          success:function(data){
              alert(data);
              console.log(data);
          },
          error:function(err){
             alert('error'+err);
            }
       });

In php

$arr=json_decode($_POST['userdata']);
foreach($arr as $v){
    print_r($v);
}

Getting this error

Invalid argument supplied for foreach

Upvotes: 1

Views: 267

Answers (2)

Praveen Kumar
Praveen Kumar

Reputation: 2408

You have error in your json syntax

Your json should be

 var data =  '[{"ratetype":"Y","hotelPackage":"N","roomtype":"Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000015468","ratePlanCode":"0000120709","ratebands":{"validdays":"1111111","wsKey":"fOnrQW3wP9U6eaST9cxEwNldIVM6N6LdxDrDapJ4gq4xUB8SLli5fMQ6w2qSeIKuoaZbT2or8tYkqYfjzPL9wNTRsJN40fffmk9s1Uz6PbbEOsNqkniCrsHjlG4I7MKBayEyj9KbhxGqp8tN23vC5K+lzg+CLhCVc4A727IY+8t1uCj9hv8OAqYPqiatWpH/7ANOsUaHXl4UGSHhnwqssBs1/1meUilvdkgIrhy7u2+1TW+z1jMN3+lQQ1KvLvexxDrDapJ4gq7WpqakyUIlysQ6w2qSeIKu5a8gxPgjph7EOsNqkniCrumRpycuiwkwcJ1QcdikvX8AIeS1LF1SedADwU6eU9IaCaZCAig5yMBccvSRKT+W+ZsfPoLN5c0IliYMwnHbAfXwhKi3O/+L9SyeKeLupHtA9S+XKwz97LvEOsNqkniCrvIh6xV3cNuuKS12MjOBUQSs4y2qNXPFKw==","extGuestTotal":"0","roomTotal":"4350","servicetaxTotal":"466","discount":"385.0","commission":"0","originalRoomTotal":"3965"}},{"ratetype":"Y","hotelPackage":"N","roomtype":"Super Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000017101","ratePlanCode":"0000120713","ratebands":{"validdays":"1111111","wsKey":"mPRyZ7i+l3d9YkBTbyd4CsQ6w2qSeIKubc0g8TGBVVSbBYEQK7zdOgbJJqjW5wOwiG065xYCyu+vVu5bgidY3mfECYFCkMSIn4KACQv3zPbHDVCqduGZ/cYclnMQGbwGDufqO8lYtnyH9KjpH"}}]';

In html

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function(){
    $('body').on('click','.ajax',function(){ 
        var id = '[{"ratetype":"Y","hotelPackage":"N","roomtype":"Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000015468","ratePlanCode":"0000120709","ratebands":{"validdays":"1111111","wsKey":"fOnrQW3wP9U6eaST9cxEwNldIVM6N6LdxDrDapJ4gq4xUB8SLli5fMQ6w2qSeIKuoaZbT2or8tYkqYfjzPL9wNTRsJN40fffmk9s1Uz6PbbEOsNqkniCrsHjlG4I7MKBayEyj9KbhxGqp8tN23vC5K+lzg+CLhCVc4A727IY+8t1uCj9hv8OAqYPqiatWpH/7ANOsUaHXl4UGSHhnwqssBs1/1meUilvdkgIrhy7u2+1TW+z1jMN3+lQQ1KvLvexxDrDapJ4gq7WpqakyUIlysQ6w2qSeIKu5a8gxPgjph7EOsNqkniCrumRpycuiwkwcJ1QcdikvX8AIeS1LF1SedADwU6eU9IaCaZCAig5yMBccvSRKT+W+ZsfPoLN5c0IliYMwnHbAfXwhKi3O/+L9SyeKeLupHtA9S+XKwz97LvEOsNqkniCrvIh6xV3cNuuKS12MjOBUQSs4y2qNXPFKw==","extGuestTotal":"0","roomTotal":"4350","servicetaxTotal":"466","discount":"385.0","commission":"0","originalRoomTotal":"3965"}},{"ratetype":"Y","hotelPackage":"N","roomtype":"Super Deluxe Double Room","roombasis":",Complimentary Wi-Fi Internet, Breakfast, ","roomTypeCode":"0000017101","ratePlanCode":"0000120713","ratebands":{"validdays":"1111111","wsKey":"mPRyZ7i+l3d9YkBTbyd4CsQ6w2qSeIKubc0g8TGBVVSbBYEQK7zdOgbJJqjW5wOwiG065xYCyu+vVu5bgidY3mfECYFCkMSIn4KACQv3zPbHDVCqduGZ/cYclnMQGbwGDufqO8lYtnyH9KjpH"}}]';
        $.ajax({ 
        url             :   'server.php', 
        data            :   {"da":id}, 
        method          :   "POST", 
        success:function(data)
        {
            $(".result").html(data);
        }, 
        error:function(err)
        { 
            alert('error'+err); 
        } 
        }); 
    });
});
</script>
</head>
<body>
<input type="button" class="ajax" name="details" value="details">
<div class="result">

</div>
</body>
</html>

In php use

<?php
$arr= json_decode($_POST['da']);
foreach($arr as $v)
{
    echo "<pre>";
    print_r($v);
    echo "</pre>";
}

?>

Upvotes: 0

Aviram
Aviram

Reputation: 3067

You want to do the following:

foreach($arr->data as $mydata) {
  echo $mydata->ratetype . "\n";
}

Replace ratetype with the appropriate data you are looking for.

Upvotes: 1

Related Questions