Как отправлять значения входных массивов с помощью ajax [duplicate]

Две и три версии аргументов reduce, которые вы пытались использовать, не принимают один и тот же тип для accumulator.

Два аргумента reduce - , определенные как :

T reduce(T identity,
         BinaryOperator accumulator)

В вашем случае T является строкой, поэтому BinaryOperator должен принимать два аргумента String и возвращать String. Но вы передаете ему int и String, что приводит к ошибке компиляции - argument mismatch; int cannot be converted to java.lang.String. На самом деле, я думаю, что передача 0, поскольку значение идентичности здесь также неверно, поскольку ожидается String (T).

Также обратите внимание, что эта версия сокращает процесс потока Ts и возвращает T, поэтому вы не может использовать его, чтобы уменьшить поток String до int.

Три аргумента reduce - , определенные как :

 U reduce(U identity,
             BiFunction accumulator,
             BinaryOperator combiner)

In ваш случай U является Integer и T является String, поэтому этот метод уменьшит поток String до Integer.

Для аккумулятора BiFunction вы можете передавать параметры двух разных типов (U и? super T ), которые в вашем случае являются целыми и строковыми. Кроме того, значение U идентичности принимает целочисленное значение в вашем случае, поэтому передача его 0 прекрасна.

Другой способ достижения желаемого:

int length = asList("str1", "str2").stream().mapToInt (s -> s.length())
            .reduce(0, (accumulatedInt, len) -> accumulatedInt + len);

Здесь тип поток соответствует типу возврата reduce, поэтому вы можете использовать две версии параметров reduce.

Конечно, вам не нужно использовать reduce вообще:

int length = asList("str1", "str2").stream().mapToInt (s -> s.length())
            .sum();

135
задан Aurelio De Rosa 7 April 2013 в 22:52
поделиться

12 ответов

Почему не используйте ассоциативный массив, поэтому вы можете легко его использовать

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}

С уважением

61
ответ дан Murtaza Khursheed Hussain 21 August 2018 в 01:24
поделиться
60
ответ дан Murtaza Khursheed Hussain 31 October 2018 в 20:32
поделиться

Это ответ на user1256561. Спасибо за вашу идею .. однако я не позаботился о расшифровке url, упомянутом в шаге 3.

, так что вот php-код, который будет декодировать сериализованные данные формы, если кому-то еще это нужно. Кстати, используйте этот код по своему усмотрению.

function xyz($strfromAjaxPOST)
{
    $array = "";
    $returndata = "";
    $strArray = explode("&", $strfromPOST);
    $i = 0;
    foreach ($strArray as $str)
    {
        $array = explode("=", $str);
        $returndata[$i] = $array[0];
        $i = $i + 1;
        $returndata[$i] = $array[1];
        $i = $i + 1;
    }
    print_r($returndata);
}

Ввод данных ввода url будет выглядеть так: attribute1 = value1 & amp; attribute2 = value2 & amp; attribute3 = value3 и т. Д.

Вывод вышеуказанного кода будет по-прежнему находиться в массиве, и вы можете его изменить, чтобы присвоить ему любую переменную, и она зависит от того, как вы хотите использовать эти данные дальше.

Array
(
    [0] => attribute1
    [1] => value1
    [2] => attribute2
    [3] => value2
    [4] => attribute3
    [5] => value3
)
1
ответ дан Alexis Pigeon 21 August 2018 в 01:24
поделиться
parse_str($_POST['whatever'], $searcharray);
15
ответ дан blasteralfred Ψ 21 August 2018 в 01:24
поделиться

При условии, что ваш сервер получает строку, которая выглядит примерно так (что нужно, если вы используете jQuery serialize()):

"param1=someVal&param2=someOtherVal"

... что-то вроде этого, вероятно, все вам нужно:

$params = array();
parse_str($_GET, $params);

$params должно быть массивом, смоделированным так, как вы ожидали. Обратите внимание, что это также работает с массивами HTML.

Для получения дополнительной информации см. Следующее: http://www.php.net/manual/en/function.parse-str.php

Надеюсь, это полезно. Удачи!

326
ответ дан Chris Allen Lane 21 August 2018 в 01:24
поделиться
  • 1
    Это лучший способ сделать это. parse_str ($ _ REQUEST ['jquery_serialized_values'], $ output); print_r ($ выход); – Andy 28 December 2010 в 18:06
  • 2
    Этот ответ должен быть принят, на самом деле ответа нет. – Ismael 14 November 2011 в 14:42
  • 3
    Этот метод намного лучше, чем другой. – dartacus 18 November 2011 в 13:13
  • 4
    Как пользователь, который дал принятый ответ, я согласен, что это правильный ответ. Я дал свой ответ, исходя из предположения, что запрос отправляется с помощью методов jQuery ajax $ .get / post (не уверен, откуда я получил это), который посылает выходные данные функции serialize () в качестве стандартных переменных GET. поэтому никакой синтаксический анализ строк не потребуется. например: $ .get ('ajax.php', $ ('form'). serialize (), function () {}); – Chris Gutierrez 12 September 2012 в 18:36
  • 5
    Это единственный приемлемый ответ! Остальные ответы переусердствовали ... – Mr.TK 4 March 2015 в 09:25

Изменено Murtaza Hussain ответ:

function unserializeForm($str) {
    $strArray = explode("&", $str);
    foreach($strArray as $item) {
        $array = explode("=", $item);
        $returndata[] = $array;
    }
    return $returndata;
}
4
ответ дан Community 21 August 2018 в 01:24
поделиться

// jQuery Post

var arraydata = $('.selector').serialize();

// jquery.post serialized var - TO - PHP Формат массива

parse_str($_POST[arraydata], $searcharray);
print_r($searcharray); // Only for print array

// Вы получаете то же самое из

 Array (
 [A] => 1
 [B] => 2
 [C] => 3
 [D] => 4
 [E] => 5
 [F] => 6
 [G] => 7
 [H] => 8
 )
40
ответ дан Griwes 21 August 2018 в 01:24
поделиться

Я думаю, вам нужно отделить имена форм от своих значений, один из способов сделать это - взорвать (&), чтобы вы получили attribute=value,attribute2=value.

Моя точка зрения заключается в том, что вы преобразуете сериализованную строку jQuery в массивы в PHP.

Ниже приведены шаги, которые вы должны соблюдать, чтобы быть более конкретными.

  1. Передано на сериализованной странице jQuery на страницу PHP (например, ajax.php), где вы используете $.ajax для отправки с помощью сообщения или получения.
  2. С вашей php-страницы взорвите (&) таким образом разделяя каждый атрибут. Теперь вы получите атрибут1 = значение, attribute2 = значение, теперь вы получите переменную массива php. например $data = array("attribute1=value","attribute2=value")
  3. Сделайте foreach в $data и explode (=), чтобы вы могли отделить атрибут от значения, и убедитесь, что urldecode значение, чтобы он преобразует сериализованные значения в нужное значение и вставляет атрибут и его значение в новую переменную массива, которая сохраняет атрибут и значение сериализованной строки.

Позвольте мне знайте, нужны ли вам дополнительные разъяснения.

0
ответ дан Jack 21 August 2018 в 01:24
поделиться

Вам просто нужно имя атрибута значения в форме. Пример:

Форма

<form id="login_form">
    <input type="text" name="username" id="a"/>
    <input type="password" name="password" id="b"/>
    <button type="button" onclick="login()">Submit</button>
</form>

Javascript

$(document).ready(function(){});
function login(){
  var obj = $('#login_form').serialize();
  $.post('index.php', obj, function(res){
    alert(res);
  })
}

PHP - index.php

<?php
if(!empty($POST['username']) && !empty($POST['password'])){
  $user = $POST['username'];
  $pass = $POST['password'];
  $res = "Username : ".$user." || Password : ".$pass;
  return $res;
}
?>
1
ответ дан Lagan Script 21 August 2018 в 01:24
поделиться

В HTML-странице:

<script>
function insert_tag()
{
    $.ajax({
        url: "aaa.php",
        type: "POST",
        data: {
            ssd: "yes",
            data: $("#form_insert").serialize()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            $("#result1").html(jsonStr['back_message']);
        }
    });
}
</script>

<form id="form_insert">
    <input type="text" name="f1" value="a"/>
    <input type="text" name="f2" value="b"/>
    <input type="text" name="f3" value="c"/>
    <input type="text" name="f4" value="d"/>
    <div onclick="insert_tag();"><b>OK</b></div>
    <div id="result1">...</div>
</form>

на странице PHP:

<?php
if(isset($_POST['data']))
{
    parse_str($_POST['data'], $searcharray);
    $data = array(
        "back_message"   => $searcharray['f1']
    );
    echo json_encode($data);
}
?>

в этом php-коде, возвратите поле f1.

7
ответ дан mghhgm 21 August 2018 в 01:24
поделиться

Просто сделайте это

        $get = explode('&', $_POST['seri'] ); // explode with and

        foreach ( $get as $key => $value) {
          $need[ substr( $value, 0 , strpos( $value, '=' ) ) ] =  substr( $value, strpos( $value, '=' ) + 1 ) ;
        }
// access your query param name=ddd&email=aaaaa&username=wwwww&password=wwww&password=eeee
     var_dump( $need['name'] );
3
ответ дан Omid Akhavan 21 August 2018 в 01:24
поделиться

Я не знаю, какую версию Jquery вы используете, но это работает для меня в jquery 1.3:

$.ajax({
    type: 'POST', 
    url: your url,
    data: $('#'+form_id).serialize(), 
    success: function(data) {
        $('#debug').html(data);
  }
});

Затем вы можете получить доступ к массивам массивов POST, как обычно, в php. Попробуйте с помощью print_r().

Я думаю, что вы обертываете сериализованное значение формы в свойстве объекта, что бесполезно, насколько я знаю.

Надеюсь, что это поможет!

1
ответ дан sixFingers 21 August 2018 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: