2015-04-25 2 views
0

Я в ситуации, когда я передаю массив из php в jquery ajax с помощью json_encode и сохраняя его в пустом массиве i объявленный в jquery script var myarr = [], а позже в том же скрипте, я отправляю тот же массив, то есть myarr на php-скрипт через $ .ajax, используя функцию JSON.stringify и получая массив в php-скрипте, например json_decode ($ _POST ['myarr'], true), но проблема в том, что он не преобразовывается обратно в массив. Я хочу получить массив, чтобы я мог использовать цикл foreach для чтения этого массива.php - передать массив от php до jquery ajax, а затем снова передать тот же массив из jquery в php

Вот такой код. Сначала я объявлении массива в JQuery скрипт

var imgArr = []; 

Затем извлечения всех изображений из PHP сценария и сохранить его в выше объявленного массива

PHP Script: 

$getProfileId = $users->getPrfId($photoId); 
$getImages = array(); 
$getImages = $users->getTypeImage($getProfileId); 
//echo json_encode($getImages); 
foreach($getImages as $value){ 
    echo json_encode($value); 
} 

JQuery 
    $.ajax({ 
     type: 'POST', 
     url: 'fetchAllImages.php', 
     data: {'photoId': photoId}, 
     success: function(data){ 
      imgArr = data; 
      } 
     }); 

Теперь в том же сценарии на другой кнопке мыши я отправив этот массив imgArr в php Script, используя $ .ajax. Вот код:

JQuery: 

$('#right_arrow').live('click', function(e){ 

var photoId = $(this).siblings('#o_popup_post').children('#o_post_box').children("#o_complete_post_image").children("img").attr("id"); 
     $.ajax({ 
     type: 'POST', 
     url: 'nextImage.php', 
     data: {'photoId': photoId, 'imgArr' : JSON.stringify(imgArr)}, 
       beforeSend: function(){ 
       $('#o_popup_post').fadeOut("normal").remove(); 
        $('.o_background_popup').append("<div id='o_popup_post'></div>"); 
     }, 
     success: function(response){ 
      $('#o_popup_post').append(response); 
     // alert(imgArr); 

     } 
    }); 
    }); 


    PHP Script: 

    $photoId = $_POST['photoId']; 

    $imageArray = array(); 
    $imageArray = json_decode($_POST['imgArr'], true); 

    foreach($imageArray as $key=>$value){....} 

Пожалуйста, помогите. Благодаря

+0

Сообщите свое мнение об этом объявлении! – adeneo

+0

@adeneo heres - это код. пожалуйста, отметьте это – Aisha

+0

Вы проверили консоль своего браузера, чтобы узнать, что передается из 'JSON.stringify (imgArr)'? – Sean

ответ

1

Я попробовал ваш пример на моем веб-сервере ... работает, как ожидалось ... и правильно ... единственное, что я удалил это beforeSend и успех Java-функции реализации

Я испытал это, и это работает правильно

HTML: test.html

<html> 
    <head> 
    <script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"> 
    </script> 
    </head> 
    <body> 
    <button id="btn">btn</button> 
    <script type="text/javascript"> 
    $(function() { 
    $('#btn').on('click', function(evt) { 
     var photoId = 1; 
     var imgArr = [{ "name": "photo.jpg", "id": 1 }]; 
     $.ajax({ 
       type: 'POST', 
       url: 'test.php', 
       data: {'photoId': photoId, 'imgArr' : JSON.stringify(imgArr)}, 
       beforeSend: function(){ 
       }, 
       success: function(response){ 
        alert(imgArr); 
       } 
      }); 
    }); 
    }); 
    </script> 
    </body> 
    </html> 

PHP: test.php

<?php 
    //print_r($_POST); 

    $photoId = $_POST['photoId']; 

    $imageArray = array(); 
    $imageArray = json_decode($_POST['imgArr'], true); 

    print_r($imageArray); 

    foreach($imageArray as $key=>$value){ 

    } 
    ?> 

переменная $ imageArray является массивом массивов, как показано на print_r ($ imageArray) Выход:

Array 
    (
     [0] => Array 
      (
       [name] => photo.jpg 
       [id] => 1 
      ) 

    ) 

, таким образом, вы должны идти так:

foreach($imageArray as $key=>$value){ 
     echo $value["name"]; 
    } 

или вы могли бы попробуйте эту функцию, которая обрабатывает проблему слэш в JSON в соответствии с настройкой магических котировок в PHP:

function _json_decode($string) { 
     if (get_magic_quotes_gpc()) { 
      $string = stripslashes($string); 
     } 

     return json_decode($string); 
    } 
+0

Есть одна проблема. ,$ imageArray не является массивом и его не работает в цикле foreach – Aisha

+0

отредактировал сообщение –

+0

да, я делаю то же самое, но он дает следующее предупреждение: Недопустимое смещение строки 'name' in .... – Aisha

Смежные вопросы