在使用ajax时,如何将CakePHP3验证注入表单?
我有一个应用程序,目前有用户点击一个会员级别,这将显示该会员的数据,并允许用户添加1或2个用户,这取决于会员资格以及使用条带支付。用户表单提交到不同的控制器操作,但条带支付到当前控制器,但也是不同的操作 我希望能够停止AJAX并显示用户表单的验证错误(如果有)。到目前为止,由于@Kevin B,这段代码将捕获并包含它在console.log中显示的AJAX数据中的错误,但我不确定如何在表单中显示它 我已经搜索并找到了CakePHP早期版本的几个示例,但我不知道它们是否是CakePHP 3的正确路径。它们看起来也和我想做的完全不同,所以我不知道它们是否有效 如果有人能给我指出正确的方向,我将不胜感激在使用ajax时,如何将CakePHP3验证注入表单?,php,jquery,ajax,cakephp-3.0,Php,Jquery,Ajax,Cakephp 3.0,我有一个应用程序,目前有用户点击一个会员级别,这将显示该会员的数据,并允许用户添加1或2个用户,这取决于会员资格以及使用条带支付。用户表单提交到不同的控制器操作,但条带支付到当前控制器,但也是不同的操作 我希望能够停止AJAX并显示用户表单的验证错误(如果有)。到目前为止,由于@Kevin B,这段代码将捕获并包含它在console.log中显示的AJAX数据中的错误,但我不确定如何在表单中显示它 我已经搜索并找到了CakePHP早期版本的几个示例,但我不知道它们是否是CakePHP 3的正确路
$(function() {
var submitAllForms = function() {
var promiseArr = $('#userForm, #secondUserForm').map(function() {
var formDetails = $(this);
return $.ajax({
type: formDetails.attr('method'),
url: formDetails.attr('action'),
data: formDetails.serialize(),
success: function(data) {
console.log('user\(s\) have been added');
console.log(data);
},
error: function(data) {
console.log('user\(s\) could not be added');
console.log(data);
}
});
}).get();
// wait until both of the other forms' data are submitted
//$.when.apply(null, promiseArr).then(function () {
// $('#payment-form').get(0).submit();
//});
}
Stripe.setPublishableKey('<?= $keys[0]['publishable_key'] ?>');
$('#payment-form').submit(function(e) {
$form = $(this);
$form.find('button').prop('disabled', true);
//async
Stripe.card.createToken($form, function(status, response){
console.log(status);
console.log(response);
if(response.error) {
$form.find('.payment-errors').text(response.error.message);
$form.find('button').prop('disabled', false);
} else {
var token = response.id;
$form.append($('<input type="hidden" name="stripeToken"/>').val(token));
submitAllForms();
}
});
return false;
});
});
console.log中的示例数据:
<div class="page-wrap">
<div class="form">
<h1>Join Now</h1>
<form method="post" accept-charset="utf-8" action="/utahreia3.0/users/add">
<div style="display:none;">
<input type="hidden" name="_method" value="POST">
</div>
<div class="input text">
<label for="full-name">Full Name</label>
<input type="text" name="full_name" maxlength="100" id="full-name" value="mr dude">
</div>
<div class="input text error">
<label for="username">Username</label>
<input type="text" name="username" maxlength="100" id="username" class="form-error" value="mrdude">
<div class="error-message">That username has already been used.</div>
</div>
<div class="input email error">
<label for="email">Email</label>
<input type="email" name="email" maxlength="100" id="email" class="form-error" value="mr@dude.com">
<div class="error-message">That email has already been used.</div>
</div>
<div class="input password">
<label for="password">Password</label>
<input type="password" name="password" id="password" value="Skater1">
</div>
<div class="input password error">
<label for="password-confirmation">Password Confirmation</label>
<input type="password" name="password_confirmation" id="password-confirmation" class="form-error" value="Skter1">
<div class="error-message">Passwords do not match.</div>
</div>
<div class="input select required">
<label for="role">Role</label>
<select name="role" required="required" id="role">
<option value="1">Admin</option>
<option value="2">Editor</option>
<option value="3">Author</option>
<option value="4" selected="selected">Reader</option>
</select>
</div>
<button type="submit">Sign Up</button>
</form>
</div>
</div>
正如您所看到的,显示的是用户/添加视图的表单,但我在成员级别/签出/2视图中。我应该用返回的表单替换表单吗?还是有更好的办法?它也是以纯html返回的,应该是JSON吗?如果是这样,我就不知道如何获取JSON格式的表单,我可以获取JSON格式提交的用户数据,但不能获取返回的表单。听起来更像是JavaScript问题,比如如何将数据注入HTML元素。您的问题缺少的是对您所面临的实际技术问题的描述。您可能是对的。。。我只知道CakePHP3有内置的验证,如果我直接转到users/add视图,它就可以工作。由于我处于一个不同的控制器操作中,并且通过ajax发布数据,它实际上没有进入该视图,因此我失去了对用户的反馈。我想知道,如果存在任何验证错误,是否有一种简单的方法可以停止ajax处理,并将它们显示为我正在使用JSON响应或其他方式直接访问users/add视图。