2

尝试通过 POST 将 html 按钮标签中的数据提交到 PHP 处理脚本时,我遇到了一个相当烦人的问题。

这是我的代码...

(1) HTML表单:

 <form id="pub-form1" method="post">
      <button type="submit" name="All" value="true">All Publishers</button>
      <button type="submit" name="Current" value="true">Current Publishers</button>
      <button type="submit" name="Users" value="true">User Priveleges</button>
 </form>

(2) 处理 POST 请求的 jQuery 脚本:

$(document).ready(function () {
$('#pub-form1').submit(function (e) {
    e.preventDefault();
    $('#results').contents().remove();
    var formData = $(this).serialize();
    $("input").prop("disabled", true);
    request = $.post('VRC_PublishersProcess.php', formData, resultsMessage);
    request.fail(function() { 
        $('#results').append("<span id=\"reply\">Your search failed for an unknown reason. Please try again in a few minutes.</ span>");            
        $("input").prop("disabled", false); });


    function resultsMessage(data) {
        $('#results').append(data);
        $("input").prop("disabled", false);
    }
  });
});

(3) PHP处理脚本:

    //All Publishers
if(isset($_POST['All'])) {
    if(!empty($_POST['All'])) {
        $result = $members->selectAllMembers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

//Current Publishers
if(isset($_POST['Current'])) {
    if(!empty($_POST['Current'])) {
        $result = $members->selectCurrentPublishers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

//Users
if(isset($_POST['Users'])) {
    if(!empty($_POST['Users'])) {
        $result = $members->selectUserPublishers();
        if($result === true) {
            exit(); //Kill the process
        }
        else {
            echo $result;
            exit(); //Kill the process
        }
    }
    else {
        $error = "<span id=\"reply\">Not all fields were entered correctly!</ span>";
        echo $error;
        exit(); //Kill the process  
    }
}

我不太确定问题的原因是什么。javascript 或 PHP 没有抛出任何错误;该页面保持空白,没有结果。

jQuery 函数似乎工作正常。我已经在其他表单上多次使用过这个特定的东西,它可以正确处理 POST 请求。我什至可以触发失败;它响应正确。

PHP 处理脚本似乎也正常运行。同样,它源自已成功处理来自同一页面的 POST 请求的其他脚本。

我的怀疑集中在 HTML 表单本身。这些是我的理论:(1)按钮没有提交“本身”。换句话说,由于没有文本或其他形式的输入,所以真的没有什么可提交的。(2) 由于某种原因,该名称与我的 PHP 脚本正在查找的名称不对应。例如,如果"All Publishers"已提交,我的 PHP 脚本正在寻找$_POST['All']. 但由于某种原因,该请求并未保存在 PHP 超全局数组中的该标识符下。

我的目标是为最终用户提供三种显示数据的选项。现在,这行不通。

任何反馈表示赞赏。

最终解决方案:

  <div id="pub1">
            <a href="#" class="drop" id="one">Other</a>
            <div id="displayselect" method="post">
                <form id="select1" method="post">
                    <input type="hidden" name="All" value="1" />
                </form>
                <form id="select2" method="post">
                    <input type="hidden" name="Current" value="1" />
                </form>
                <form id="select3" method="post">
                    <input type="hidden" name="Users" value="1" />
                </form>
                <button type="submit" name="All" form="select1">All Publishers</button>
                <button type="submit" name="Current" form="select2">Current Publishers</button>
                <button type="submit" name="Users" form="select3">User Priveleges</button>
           </div>
        </div>

显然,在 jQuery 中进行了适当的修改......

4

1 回答 1

3

弄清楚了,

jQuery.serialize 在按钮 ( http://api.jquery.com/serialize/ ) 上不起作用,它只起作用,所以我尝试将你的 HTML元素input, textarea, select切换到,但这也不起作用,因为 jQuery 忽略了序列化时的标签,我尝试添加一个并检查它序列化的是什么,所以你必须稍微改变你的表单。button<input type="submit" ...submit<input type="hidden" name="test" value="1" />test=1

用于测试的 jsFiddle:http: //jsfiddle.net/4D8Nz/

于 2013-07-18T07:12:44.753 回答