Php Yii2-提交ajax后重新加载页面
问题就在这里。我正在尝试使用ActiveForm和Braintree托管字段实现我的签出表单的Ajax提交。处理Ajax的JS脚本已经过测试,在我网站的其他部分也可以正常工作 有了这段代码,我可以在我的控制器上获取$\u POST数据,并使用它来进行正常的支付交易 问题是。我的控制器操作一直到达脚本末尾的渲染点。这会使我的页面重新加载。 我错了,或者我可以假设,在这种情况下,在提交帖子后,回报永远不会被触动吗?请求发送到控制器,执行其操作,作为对视图的响应返回,不应再发生任何事情 下面我将发布流程的相关部分。 如果你能在这方面提供帮助,我将不胜感激 控制员:Php Yii2-提交ajax后重新加载页面,php,jquery,ajax,yii2,braintree,Php,Jquery,Ajax,Yii2,Braintree,问题就在这里。我正在尝试使用ActiveForm和Braintree托管字段实现我的签出表单的Ajax提交。处理Ajax的JS脚本已经过测试,在我网站的其他部分也可以正常工作 有了这段代码,我可以在我的控制器上获取$\u POST数据,并使用它来进行正常的支付交易 问题是。我的控制器操作一直到达脚本末尾的渲染点。这会使我的页面重新加载。 我错了,或者我可以假设,在这种情况下,在提交帖子后,回报永远不会被触动吗?请求发送到控制器,执行其操作,作为对视图的响应返回,不应再发生任何事情 下面我将发布流
public function actionCheckout() {
$checkoutForm = new CheckoutForm();
$countriesList = $checkoutForm->countriesList();
$brainConfig = new BrainHelper();
$clientToken = $brainConfig->clientToken;
if ($checkoutForm->load(Yii::$app->request->post()) && $checkoutForm->validate()) {
$checkoutForm->value = BrainHelper::$boxPrice * $checkoutForm->quantity;
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$nonce = $_POST["payment_method_nonce"];
$brainHelper = new BrainHelper();
$result = $brainHelper->registerPayment($nonce);
if ($result->success) {
$this->saveClientPurchaseDataToDB($_POST, $checkoutForm->value);
BrainHelper::settlePayment($result->transaction->id);
} else { // In this case, the transaction wasn't authorised by Braintree. Such a pity!
// So let's communicate the bad news.
}
}
return $this->render('checkout', ['model' => $checkoutForm, 'clientToken' => json_encode($clientToken), 'countries' => $countriesList]);
}
观点:
<div class="checkout">
<?php $form = ActiveForm::begin(['id' => $model->formName(), 'enableClientValidation'=> true]);?>
<?= $form->field($model, 'first_name')->textInput(['placeholder' => Yii::t('checkoutForm','First Name')])->label(false) ?>
<?= $form->field($model, 'last_name')->textInput(['placeholder' => Yii::t('checkoutForm','Last Name')])->label(false) ?>
<?= $form->field($model, 'email')->textInput(['placeholder' => Yii::t('checkoutForm','Email')])->label(false) ?>
<?= $form->field($model, 'quantity') ?>
<label for="card-number">Credit card number:</label>
<div id="card-number"></div>
<label for="cvv">CVV code: <span>(3 or 4 digits behind your card)</span></label>
<div id="cvv"></div>
<label for="expiration-date">Card Expiration Date:</label>
<div id="expiration-date"></div>
<div class="form-group">
<div id="submission-btn">
<?= Html::submitButton(Yii::t('checkoutForm', 'Submit')) ?>
<?php ActiveForm::end(); ?>
</div>
<?php $script = <<< JS
$('form#{$model->formName()}').on('beforeSubmit', function(e) {
var \$form = $(this);
$.post(
\$form.attr("action"),
\$form.serialize() // serialize yii2 form
);
$(\$form).trigger("reset"); // cleans the form
return false;
});
JS;
$this->registerJs($script);
?>
信用卡号码:
CVV代码:(卡后3或4位数字)
信用卡到期日:
提前谢谢。我在解析你的问题时有点困难,但我对Yii也不太感兴趣。似乎你永远都不会从你的if(post)块中返回。可以将返回渲染粘贴到else块中。这就是你要问的吗?你能澄清一下吗?在我的控制器操作中,我已经尝试过仅在我的$u POST未设置的情况下渲染视图。但还是一样。我敢打赌braintree api会一直刷新视图。我将很快提供更多关于braintree实现的信息。我将查看您呈现的HTML并验证
$('form#{$model->formName()}')
是否返回正确的值并匹配表单中的id。我在解析您的问题时有点困难,但我对Yii也不太感兴趣。似乎你永远都不会从你的if(post)块中返回。可以将返回渲染粘贴到else块中。这就是你要问的吗?你能澄清一下吗?在我的控制器操作中,我已经尝试过仅在我的$u POST未设置的情况下渲染视图。但还是一样。我敢打赌braintree api会一直刷新视图。我将尽快提供有关braintree实现的更多信息。我将查看您呈现的HTML并验证$('form#{$model->formName()}')
是否返回正确的值并与表单中的id匹配。