Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2019, 11:19
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Возник POST вопрос
Добрый день. Вопрос по поводу передачи массива из объектов.

Допустим у нас есть такая форма:
<form action="post.php" method="post">
    <input type="text" name="post[0]['test1']" value="1"><br>
    <input type="text" name="post[0]['test2']" value="2"><br>
    <input type="text" name="post[1]['test1']" value="3"><br>
    <input type="text" name="post[1]['test2']" value="4"><br>
    <input type="submit" value="Отправить">
 </form>


на выходе в post.php мы получим такой массив:
<?php
if(!empty($_POST['post'])){
 
print_r($_POST['post']);
 
Array
(
    [0] => Array
        (
            ['test1'] => 1
            ['test2'] => 2
        )
 
    [1] => Array
        (
            ['test1'] => 3
            ['test2'] => 4
        )
 
)
}


Если мы захотим передать такой же объект через jquery то результат будет таким же:

var post = {
        'post': [
          {
            'test1': 1,
             'test2': 2
          },
          {
           'test1': 3,
           'test2': 4
           }
        ],
    }
$.post("post.php", post, function(data) {
         console.log(data);
}, "json");


Но вот если я хочу передать без jquety с помощью вот этой функции:
function postAjax(url, data, success) {
    var params = typeof data == 'string' ? data : Object.keys(data).map(
            function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
        ).join('&');
    var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    xhr.open('POST', url);
    xhr.onreadystatechange = function() {
        if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
        if (xhr.status==500) { console.log(xhr.responseText); }
    };
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(params);
    return xhr;
}


То в php отправится такая строка:

Код:
post=%5Bobject%20Object%5D%2C%5Bobject%20Object%5D
Подскажите как переделать эту часть функции чтобы объект отправился нормально:

var params = typeof data == 'string' ? data : Object.keys(data).map(
            function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
        ).join('&');
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2019, 12:05
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Вот так получилось:
var post = [
        {
            'test1': 1,
             'test2': 2
        },
        {
           'test1': 3,
           'test2': 4
        }
    ];
    var formData = new FormData(),
        request = new XMLHttpRequest();
     
    [].forEach.call(post, function(item, i) {
        for (key in item) {
            formData.append('post[' + i + ']['+key+']', item[key]);
        }
    })
     
    request.open("POST", "post.php");
    request.send(formData);
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2019, 12:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Artur_Hopf
[].forEach.call(post, function(item, i) {
post.forEach(function(item, i) {
Ответить с цитированием
  #4 (permalink)  
Старый 27.05.2019, 12:50
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

рони,
поправил, спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
небольшой вопрос по центровке wlad Internet Explorer 1 08.01.2017 19:03
вопрос по toDataURL() GodZiLA Общие вопросы Javascript 0 03.06.2014 17:21
Вопрос по замыканиям Goodfella Общие вопросы Javascript 20 09.03.2011 01:21
вопрос возник dmitriymar Общие вопросы Javascript 8 03.01.2011 18:58
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49