Simple ajax form using javascript no jQuery

前端 未结 9 1065
终归单人心
终归单人心 2020-11-28 11:46

I\'m working with a form for which the mark-up I can\'t change & can\'t use jQuery. Currently the form post the results to a new window. Is it possible to change this to

9条回答
  •  情话喂你
    2020-11-28 12:30

    I just took Coomie's answer above and made it work for Radio/Checkboxes. I can't believe how simple and clear this is. With a few exceptions, I'm done using frameworks.

        var params = "";
        var form_elements = form.elements;
        for (var i = 0; i < form_elements.length; i++) 
        {
            switch(form_elements[i].type)
            {
                case "select-one":
                {
                    value = form_elements[i].options[form_elements[i].selectedIndex].value;
                }break;
                case "checkbox":
                case "radio": 
                {
                    if (!form_elements[i].checked)
                    {
                        continue; // we don't want unchecked data
                    }
                    value = form_elements[i].value;
                }break;
                case "text" :
                {
                    value = form_elements[i].value;                
                }break;
    
            }
    
            params += encodeURIComponent(form_elements[i].name) + "=" + encodeURIComponent(value) + "&";
        }
    
    
    
        var xhr = new XMLHttpRequest();    
        xhr.open('POST', "/api/some_url");
        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200)
                {
    
                    console.log("xhr.responseText");
                }
                else
                {
                    console.log("Error! Status: ", xhr.status, "Text:", xhr.responseText);
                } 
            }
        };
    
        console.log(params);
        xhr.send(params);
    

提交回复
热议问题