我尝试使用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";
}
}
但我只是通过控制器获得第一个输入。它是一个字符串而不是数组。
我该怎么办?如何将表单中的所有输入作为数组传入控制器?
答案 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);
});
}