Возник 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('&'); |
Вот так получилось:
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); |
Цитата:
post.forEach(function(item, i) { |
рони,
поправил, спасибо :thanks: |
Часовой пояс GMT +3, время: 06:50. |