我在客户端有这个代码:
this.formValidation = function() {
// Parse forms
$('.submit.btn').on('click', function(){
$(this).closest('form').submit();
});
$.each($('form.validate'), function(){
$(this).validate({
submitHandler: function(form) {
var data = $(form).serializeArray();
var action = $(form).attr('action');
$.ajax({
method: 'post',
dataType: 'json',
url: action,
data: data,
success: function(d) {
// Prepare the message
var message = '';
$.each(d, function(k, m){
var messageType = 'boolean' === $.type(m.status) ? (m.status?'success':'error') : m.status;
message += '<div class="alert alert-'+messageType+'">'+m.message+'</div>';
});
// Replace the form with the message
$(form).replaceWith($(message));
},
error: function() {
var error = $('<div class="alert alert-error">error </div>');
$(form).replaceWith(error);
}
});
}
});
});
};
支持的消息类型是:'成功'和'错误',用于加载样式的CSS
和服务器中的此代码:
$d= array(
'status' => 'success',
'm.status'=> 'success',
'message'=>'success'
);
echo json_encode($d);
?>
但它没有返回成功消息。我应该如何在服务器端形成阵列?
我知道它进入了代码的成功部分,但我不知道如何在服务器端编写变量。
不应该更改JavaScript代码,我只需要修改服务器php。 我怎么能这样做?
我也有几个问题:
服务器php中的变量名是否应该与函数内的变量名相同?在这个例子中当我回显$ d应该是success: function(d) {
还是我也可以使用其他名字?它们甚至是相关的吗?
function(k, m){
中的变量'k'和'm'何时来自?你能解释一下这个功能是做什么的吗?
答案 0 :(得分:0)
开始一个longest mile
(dunno,如果它被称为,但它坚持我)女巫是你做console.log('something');
从哪里你应该看到的东西,并逐步向后移动执行,直到你做看到一些东西,很好的方法来隔离问题。
此外,如果您使用Google Chrome
,开发工具有一个很好的网络选项卡,您可以看到ajax请求及其返回的内容。也许它返回了错误500?
通过这种方式,您可以轻松诊断任何ajax呼叫。
关于你的问题:
不,所有jQuery参数都是为结果命名变量。所以你可以说出任何名称,我通常会亲自使用resp
。
每个参数都引用“key”和“value”(在这种情况下,使用m,就像上面一样)。阅读here了解更多信息。
答案 1 :(得分:0)
解决,
我不得不使用多维数组来响应json。
服务器端的正确代码是:
$d=array(
array(
'status'=>'success',
'message'=>'mail sent'
),
array(
'status'=>'info',
'message'=>'thank you!'
)
);
//Set JSON header
//warning : UTF-8 byte order causes the Cannot modify header information error !!!!
header('Content-type: application/json');
echo json_encode($d);