Пользовательская функция для сериализации форма входа (и выбирает)


Просто прошу, если следующий код-это ок, так как мне нужно не найти эквивалента .сериализовать() на ваниль с JS. Так что я придумал свою собственную функцию для равнины ol' Яш.

    function uzim_vred(phpdoc,parent_id){

    var name = "";
    var val = "";
    var str = phpdoc+"?,";
    var len = ($("#"+parent_id+" [name]").length);
    var i = 0;

    $("#"+parent_id+" [name]").each(function(){

        i++;
        name = $(this).attr('name');
        val = $(this).val();

        str += name+"="+val;

        if(i<len){
            str += "&,"
        }

    });

    i = 0;
    var elems = str.split(",");

    str = "";
    while(i<=len){
        str += elems[i];
        i++
    }


        var xhttp = new XMLHttpRequest();

        xhttp.onreadystatechange = function() {

            if((document.getElementById("raport")!=undefined || document.getElementById("raport")!=null) && this.readyState == 4 && this.status == 200){
                document.getElementById("raport").innerHTML = this.responseText;
            }

        };

        xhttp.open("GET", str, false);      
        xhttp.send();

}

Как envoke это:

<button type="button" onclick="uzim_vred('yourPHPscript.php',$(this).parent().attr('id'))">Send</button>

Первый аргумент-это путь и имя скрипта на PHP, второй-идентификатор элемента формы, у которого вы хотите "сериализовать" ценностей.



205
1
задан 22 февраля 2018 в 12:02 Источник Поделиться
Комментарии
3 ответа

Вы на самом деле не реализует в обычный JavaScript в том, что вы с помощью jQuery внутри функции. Это, кажется, странный выбор. Вы используете jQuery или нет? Вы должны принять решение. Если вы используете jQuery, тогда я не знаю, почему эта функция существовала бы вообще.

Само название функции-это бессмысленные и вовсе не передать то, что делает функция.

Вы не кодирование url строку запроса.

Вы не обрабатывает случай, когда ваш асинхронный не возвращает ответ 200.

Вы используете счетчиков циклов, где вам не нужно.

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

Стиль кода проблематично:


  • противоречивые отступ

  • строк кода, которые являются слишком длинными

3
ответ дан 22 февраля 2018 в 01:02 Источник Поделиться

$("#"+parent_id+" [name]")

Если вы используете jQuery, то почему бы не использовать способ сериализовать?
Я думаю, что это то, что Майк предлагал.

1
ответ дан 22 февраля 2018 в 05:02 Источник Поделиться

Пересмотренный кодекс согласно замечаниям Майк Брант и 200_success:

function serialization(phpdoc,me){

var parent_id = me.parentNode.id
var name = "";
var val = "";
var str = phpdoc+"?,";
var i = 0;

var net = document.getElementById(parent_id).querySelectorAll("#"+parent_id+" [name]");
var len = document.getElementById(parent_id).length-1;

while(i<len) {

name = net[i].getAttribute("name");
val = net[i].value;

i++
str += name+"="+val;

if(i<len){
str += "&,"
}

}

i = 0;
var elems = str.split(",");

str = "";
while(i<=len){
str += elems[i];
i++
}
str = encodeURI(str);

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {

if((document.getElementById("raport")!=undefined || document.getElementById("raport")!=null) && this.readyState == 4 && this.status == 200){
document.getElementById("raport").innerHTML = this.responseText;
}

};

xhttp.open("GET", str, false);
xhttp.send();

}

И как envoke это:

<button type="button" onclick="serialize('yourPHPscript.php',this)">Send</button>

0
ответ дан 22 февраля 2018 в 06:02 Источник Поделиться