Intereting Posts
получить длину видео в формате FLV php-webdriver: дождитесь ответа браузера после отправки формы, используя click () Google App Engine Launcher выдает ошибку ascii-кодека при развертывании файла образа jQuery Validate Remote – проверьте, существует ли электронная почта PHP-пространство имен PDO не найдено Добавление данных в переменную php с помощью PDO fetchAll :: fetch_assoc TCPDF ERROR: невозможно найти объект (8, 0) в ожидаемом месте Многомерный массив из строки Получение ошибки при попытке инициализации этой публичной переменной класса с использованием dirname () вне метода Стандартный способ переключения из / в user_timezone и gmt mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, boolean задан в Настройка задания cron с помощью Webmin PHPExcel – .xlsx загружает нечитаемый контент Получить ограниченное слово строки MySQL Возвращает различное количество строк на localhost vs live server для одного и того же кода

Пропустить Javascript Array -> PHP

Предположим, у меня есть массив javascript с кучей элементов (от 50 до 200).

Я хочу отправить это на PHP (подготовленный оператор) с помощью ajax. В настоящее время я .load php-файл много раз внутри цикла, но я хочу преобразовать его в массив и отправить массив один раз, загружая файл PHP один раз вместо 50-200 раз.

array[i] = variable;

Related of "Пропустить Javascript Array -> PHP"

Вы можете использовать JSON.stringify(array) для кодирования вашего массива в JavaScript, а затем использовать $array=json_decode($_POST['jsondata']); в вашем скрипте PHP, чтобы получить его.

Запросы AJAX ничем не отличаются от запросов GET и POST, инициированных с помощью элемента <form> . Это означает, что вы можете использовать $ _GET и $ _POST для извлечения данных.

Когда вы делаете запрос AJAX (пример jQuery):

 // JavaScript file elements = [1, 2, 9, 15].join(',') $.post('/test.php', {elements: elements}) 

Это (почти) эквивалентно отправке этой формы:

 <form action="/test.php" method="post"> <input type="text" name="elements" value="1,2,9,15"> </form> 

В обоих случаях на стороне сервера вы можете считывать данные из переменной $ _POST:

 // test.php file $elements = $_POST['elements']; $elements = explode(',', $elements); 

Для простоты я соединяю элементы с запятой здесь. Однако сериализация JSON является более универсальным решением.

Вот функция преобразования массива или объекта js в php-совместимый массив, который должен быть отправлен как параметр http get request:

 function obj2url(prefix, obj) { var args=new Array(); if(typeof(obj) == 'object'){ for(var i in obj) args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]); } else args[args.length]=prefix+'='+encodeURIComponent(obj); return args.join('&'); } 

префикс – это имя параметра.

РЕДАКТИРОВАТЬ:

 var a = { one: two, three: four }; alert('/script.php?'+obj2url('a', a)); 

Будет производить

 /script.php?a[one]=two&a[three]=four 

который позволит вам использовать $ _GET ['a'] в качестве массива в script.php. Вам нужно будет указать свой путь в ваш любимый движок ajax при поставке url для вызова script.php из js.

Поэтому используйте цикл на стороне клиента для создания двумерного массива ваших массивов и отправьте всю вещь на PHP по одному запросу.

На стороне сервера вам понадобится еще один цикл, который выполняет свою обычную вставку / обновление для каждого подматрица.

Вы можете передать массив из javascript в PHP …

Javascript … ArraySender.html

 <script language="javascript"> //its your javascript, your array can be multidimensional or associative plArray = new Array(); plArray[1] = new Array(); plArray[1][0]='Test 1 Data'; plArray[1][1]= 'Test 1'; plArray[1][2]= new Array(); plArray[1][2][0]='Test 1 Data Dets'; plArray[1][2][1]='Test 1 Data Info'; plArray[2] = new Array(); plArray[2][0]='Test 2 Data'; plArray[2][1]= 'Test 2'; plArray[3] = new Array(); plArray[3][0]='Test 3 Data'; plArray[3][1]= 'Test 3'; plArray[4] = new Array(); plArray[4][0]='Test 4 Data'; plArray[4][1]= 'Test 4'; plArray[5] = new Array(); plArray[5]["Data"]='Test 5 Data'; plArray[5]["1sss"]= 'Test 5'; function convertJsArr2Php(JsArr){ var Php = ''; if (Array.isArray(JsArr)){ Php += 'array('; for (var i in JsArr){ Php += '\'' + i + '\' => ' + convertJsArr2Php(JsArr[i]); if (JsArr[i] != JsArr[Object.keys(JsArr)[Object.keys(JsArr).length-1]]){ Php += ', '; } } Php += ')'; return Php; } else{ return '\'' + JsArr + '\''; } } function ajaxPost(str, plArrayC){ var xmlhttp; if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();} else{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} xmlhttp.open("POST",str,true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send('Array=' + plArrayC); } ajaxPost('ArrayReader.php',convertJsArr2Php(plArray)); </script> 

и PHP Code … ArrayReader.php

 <?php eval('$plArray = ' . $_POST['Array'] . ';'); print_r($plArray); ?>