代码之家  ›  专栏  ›  技术社区  ›  Manngo

XMLHttpRequest&FormData未提交数据

  •  7
  • Manngo  · 技术社区  · 7 年前

    我正在尝试使用 post FormData 对象

    var form=…; //  form element
    var url=…;  //  action
    form['update'].onclick=function(event) {    //  button name="update"
        var xhr=new XMLHttpRequest();
            xhr.open('post',url,true);
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        var formData=new FormData(form);
            formData.append('update', true);    // makes no difference
        xhr.send(formData);
        xhr.onload=function() {
            alert(this.response);
        };
    };
    

    表格包括:

    • 一个按钮( type="button" name="update" )运行脚本
    • action method="get"

    我的PHP脚本包含以下内容:

    if(isset($_POST['update'])) {
        print_r($_POST);
        exit;
    }
    
    //  more stuff
    
    print 'other stuff';
    

    当我尝试它时,PHP会进入其余的代码,我会得到其他输出,而不是我从 print_r 陈述

    • new FormData() update 手动数据。
    • new FormData(form) 。无论我是否添加
    • .

    来自本身看起来像这样:

    <form id="edit" method="post" action="">
        <p><label for="edit-summary">Summary</label><input id="edit-summary" name="summary" type="text"></p>
        <p><label for="edit-description">Description</label><input id="edit-description" name="description" type="text"></p>
        <p><label for="edit-ref">Reference</label><input id="edit-ref" name="ref" type="text"></p>
        <p><label for="edit-location">Location</label><input id="edit-location" name="location" type="text"></p>
        <p><button type="button" name="update">OK</button></p>
    </form>
    

    请不要jQuery。

    2 回复  |  直到 3 年前
        1
  •  12
  •   Musa    3 年前

    发送FormData对象时的内容类型是多部分/表单数据,而不是url编码的。

    因此,您所要做的就是不设置内容类型,它就会起作用。

    var xhr=new XMLHttpRequest();
    xhr.open('post',url,true);
    //xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");<--don't do this
    var formData=new FormData(form);
    formData.append('update', true);    // makes no difference
    xhr.send(formData);
    xhr.onload=function() {
        alert(this.response);
    };
    
        2
  •  0
  •   RichGoldMD    7 年前

    将按钮的名称更改为“update”以外的名称(并在 form['update'].onclick...