Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2-提交ajax后重新加载页面_Php_Jquery_Ajax_Yii2_Braintree - Fatal编程技术网

Php Yii2-提交ajax后重新加载页面

Php Yii2-提交ajax后重新加载页面,php,jquery,ajax,yii2,braintree,Php,Jquery,Ajax,Yii2,Braintree,问题就在这里。我正在尝试使用ActiveForm和Braintree托管字段实现我的签出表单的Ajax提交。处理Ajax的JS脚本已经过测试,在我网站的其他部分也可以正常工作 有了这段代码,我可以在我的控制器上获取$\u POST数据,并使用它来进行正常的支付交易 问题是。我的控制器操作一直到达脚本末尾的渲染点。这会使我的页面重新加载。 我错了,或者我可以假设,在这种情况下,在提交帖子后,回报永远不会被触动吗?请求发送到控制器,执行其操作,作为对视图的响应返回,不应再发生任何事情 下面我将发布流

问题就在这里。我正在尝试使用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匹配。