2016-06-08 2 views
-1

У меня есть этот JQuery код, который добавляет в массив внутри $ каждый цикл:PHP массив разбора отправил с JQuery

new_edit = {}; 
new_edit['file_id'] = $file_id; 
new_edit['file_realname'] = $new_file_realname; 
new_edit['file_folder'] = $new_file_folder; 
new_file_edits.push(JSON.stringify(new_edit)); 

JQuery new_file_edits выходной массив

{"file_id":"1857","file_realname":"dddd[1].mp4","file_folder":"/"}, 
{"file_id":"1856","file_realname":"aaaa[1].jpg","file_folder":"/"}, 
{"file_id":"1855","file_realname":"ssss[1].jpg","file_folder":"/"} 

и им пытаясь опубликовать его в call.php следующим образом:

$.ajax({ 
    type: "POST", 
    url: "/call.php", 
    data: "edit_files="+ arrayVarHere, 
    contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     success: function(msg){ 
      alert(+msg); 
     } 
    }); 

В PHP файл call.php у меня есть этот код:

if(isset($_POST['edit_files'])){ 
    $edit_array = $_POST['edit_files']; 
    $file_array = array(); 
    foreach($edit_array as $key => $value){ 
     $file_array[$key] = $value; 
    } 
print_r($file_array); 
    die(); 
} 

, но я получаю эту ошибку, и я не могу понять, как это исправить, был прибегая к помощи его на некоторое время теперь ...

ошибка:

Warning: Invalid argument supplied for foreach() in /home2/dddd/public_html/call.php on line 237

Line 237: foreach($edit_array as $key => $value){

Любая помощь очень ценится!

-Morten

EDIT 1: Я изменил $edit_array = $_POST['edit_files']; к $edit_array = array($_POST['edit_files']);

И теперь он выдает:

{"file_id":"1857","file_realname":"dddd[1].mp4","file_folder":"/"}, 
{"file_id":"1856","file_realname":"aaaa[1].jpg","file_folder":"/"}, 
{"file_id":"1855","file_realname":"ssss[1].jpg","file_folder":"/"} 

Как я иду отсюда с foreach($edit_array as $key => $value){ части?

Edit 2: я построю свою arrayVarHere так:

$.each($selected_files_array, function(index, value){ 
//i get $file_id, $new_file_realname and $new_file_folder with some code here 
     new_edit = {}; 
     new_edit['file_id'] = $file_id; 
     new_edit['file_realname'] = $new_file_realname; 
     new_edit['file_folder'] = $new_file_folder; 
     arrayVarHere.push(JSON.stringify(new_edit)); 
    }); 
+0

Возможный дубликат [PHP Warning: недопустимый аргумент, предоставленный foreach()] (http://stackoverflow.com/questions/6572061/php-warning-invalid-argument-supplied-for-foreach) – Thamilan

+0

Является ли $ edit_array массивом? – Li357

+0

Проверьте это тоже: http://stackoverflow.com/q/2630013/5447994 – Thamilan

ответ

0

изменить код так:

данные: "edit_files =" + arrayVarHere,

+1

data: {edit_files: new_edit} – Toney

0

вызова json данные по json_decode во время звонка.PHP

if(isset($_POST['edit_files'])){ 
$edit_array = json_decode($_POST['edit_files'],true); //return array 
$file_array = array(); 
foreach($edit_array as $key => $value){ 
    $file_array[$key] = $value; 
} 
print_r($file_array); 
die(); 
} 

в вашем АЯКС предупреждение должно быть

success: function(msg){ 
      alert(msg); //remove plus sign ,this can output `NaN` 
     } 
+0

Как я могу вывести file_realname для каждого file_id в массиве? – user3504935

+0

что будет выводить '$ key' и' $ value' в foreach –

0

проверка edit_array является массив print_r ($ edit_array);

проверки CONTENTTYPE используются данные формы, то правильно иначе использовать JSON типа

если данные формы затем проверить данных: edit_files []: arrayVarHere,

0

Он возвращает этот массив

Array ([0] => [{"file_id":"1857","file_realname":"aq53pop_460sv[1].mp4","file_folder":"/"},{"file_id":"1859","file_realname":"aKqbD8Q_460sv[1].mp4","file_folder":"/"},{"file_id":"1856","file_realname":"aDopymK_700b[1].jpg","file_folder":"/"}]) 

как я могу зацикливать массив и получить доступ к значению file_id и т. Д.?

0

То, как вы передаете данные на PHP, возможно, не тот идеал. Вот то, что может заставить вас начать:

PHP: call.php

<?php 

     $data0  = isset($_POST['data_0']) ? json_decode($_POST['data_0'], true) : null; 
     $data1  = isset($_POST['data_1']) ? json_decode($_POST['data_1'], true) : null; 
     $data2  = isset($_POST['data_2']) ? json_decode($_POST['data_2'], true) : null; 

     $arrData = array(
      'data0' => $data0, 
      'data1' => $data1, 
      'data2' => $data2, 
     ); 

     foreach($arrData as $dataKey=>$dataObject){ 
      $tempFileID  = $dataObject->file_id; 
      $tempFileName = $dataObject->file_realname; 
      $tempFileFolder = $dataObject->file_folder; 

      // DO SOMETHING WITH THESE DATA AND THEN BUILD UP A RESPONSE FOR AJAX + SEND IT... 

      // UNCOMMENT TO SEE THE DATA IN YOUR NETWORKS CONSOLE BUT 
      // IF YOU DO THIS (SINCE YOU EXPECT JSON RESPONSE) YOUR AJAX WILL RESPOND WITH AN ERROR... 
      // var_dump($dataObject); 
     } 

     // RESPOND WITH THE SAME DATA YOU RECEIVED FROM AJAX: JUST FOR TESTING PURPOSES... 
     die(json_encode($arrData)); 

    ?> 

JAVASCRIPT: СТРОИМ ДАННЫХ ДЛЯ PHP

<script type="text/javascript"> 
     var dataForPHP    = {}; 
     var iCount     = 0; 

     $.each($selected_files_array, function(index, value){ 
      var keyName     = "data_" + iCount; 
      new_edit     = {}; 
      new_edit['file_id']   = $file_id; 
      new_edit['file_realname'] = $new_file_realname; 
      new_edit['file_folder']  = $new_file_folder; 
      dataForPHP[keyName]   = new_edit; 
      iCount++; 
     }); 
    </script> 

JAVASCRIPT: AJAX ЗАПРОС

<script type="text/javascript"> 
     $.ajax({ 
      type  : "POST", 
      url   : "/call.php", 
      datatype : "JSON", 
      data  : dataForPHP, 
      contentType: "application/x-www-form-urlencoded;charset=UTF-8", 

      success: function(msg){ 
       if(msg){ 
        alert("Ajax Succeeded"); 
        console.log(msg); 
       } 
      } 
     }); 
    </script> 
Смежные вопросы