无法从jQuery向PHP发布数据

时间:2015-02-01 00:32:16

标签: php jquery forms

我尝试使用jQuery将表单中的某些数据发布到控制器中。 但我在这里遇到了困难。

我有一个带有一些输入的表单和一个调用我的脚本的按钮。

按钮

  <button onclick="save('layoutstyle');">save</button>

脚本

function save(action) {

jQuery("#formTest").submit(function(e) {
    e.preventDefault();

    var $form = jQuery(this);

    var $inputs = $form.find("input, select, button, textarea");

    var serializedData = $form.serialize();
    $inputs.prop("disabled", true);

    jQuery.ajax({
        type: 'POST',
        // TO DO
        url:  '/template/templates/nwmadm/controller.php',
        data: 'save='+ action+'&data='+ serializedData,
        dataType: 'html',
        success: function(data) {

            jQuery('#content').html(data);

        }
    });

})

}

php中的控制器看起来像这样

    if (isset($_POST["save"])) {
    switch ($_POST["save"]) {

        case "layoutstyle":
        $return = $_POST["data"];
        echo $return;
        break;

        case "surveys":
        echo "This is the Surveys site";
        break;

        default:
        echo "Return 404 page not found";

    }
}

但我只是通过控制器获得第一个输入。它是一个字符串而不是数组。

我该怎么办?如何将表单中的所有输入作为数组传入控制器?

2 个答案:

答案 0 :(得分:2)

JQuery.ajax()中您正在使用代码:

data: 'save='+ action+'&data='+ serializedData,

serializedData是一个字符串,看起来像field1=val1&field2=val2。这意味着,结果数据字符串看起来如下:

save=layoutstyle&data=field1=val1&field2=val2

而且似乎格格不入。相反,尝试使用此代码

data: 'save=' + action + '&' + serializedData

在PHP控制器中,您必须能够访问请求的参数:

$action = $_POST["save"];
$field1 = $_POST["field1"];
$field2 = $_POST["field2"];

答案 1 :(得分:0)

我没有尝试过您的代码,但我认为您需要在表单提交事件后为回调函数设置禁用模式

您需要在表单中设置此控件:

<input type="hidden" id="action" />

这是我在某些项目中使用的自定义ajax处理程序示例。 在表单标记中,使用处理程序设置onsubmit事件:

onsubmit =&#34; javascript:ajaxHandlerForm(this,&#39; your_action&#39;);&#34;

/**
 * Custom ajax form handler. 
 * @param {object} obj Reference to form
 * @param {String} action Name of Action 
 * @returns {Void}
 */
function ajaxHandlerForm(obj, action){
    // Prevent submit
    event.preventDefault();
    // Set the action. #action is an input hidden in the form
    $( "#action" ).val(action);
    // Set jQuery Ajax post : http://api.jquery.com/jquery.post/
    $.post($(obj).prop( "action" ), $(obj).serialize(),
        function(data){
            // Set disabled mode
            $(obj).find("input, select, button, textarea")
                    .prop("disabled", true);
            // 
            $( "#content" ).html(data);
    });
}