Отправка данных ajax другим ajax на контроллер в laravel - PullRequest
0 голосов
/ 23 мая 2018

Я хочу знать, возможно ли отправлять данные с одного ajax на другой ajax или нет?

Звучит смущающе, я знаю, но вот объяснение:

У меня есть способ оплаты, где этополучает данные и обрабатывает их с помощью Ajax ( к сожалению, создатели этого API сильно ограничивают свой код ), поэтому даже если я попытаюсь добавить запрос ввода в код контроллера этого Ajax, ничего не получится, поэтому мне нужносделать еще один Ajax для обработки этого запроса на ввод.

Позволяет объяснить больше кодами:

controller

public function orderspayonline(Request $request, $id){
        error_log('masuk ke snap token dri ajax');
        $midtrans = new Midtrans;
        //products data + user info etc.

        //here magic happens
        try
        {
            $snap_token = $midtrans->getSnapToken($transaction_data);
            echo $snap_token;
        } 
        catch (Exception $e) 
        {   
          return $e->getMessage;
        }
    }

Если я добавлю что-нибудь (я имею в виду что-либо) в этоtry{ часть, она перестает функционировать и возвращает ошибку!`даже я пытался перенаправить обратно своих пользователей, кроме повторения кода токена, который также выдавал ошибку. Так что, похоже, у меня действительно нет здесь никакой возможности, кроме как создать новую функцию и Ajax .

JavaScript

<script type="text/javascript">
  $('.pay-button').click(function (event) {

    $.ajaxSetup({
        headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
      });
    event.preventDefault();
    // $(this).attr("disabled", "disabled");
    var prdfoId = $(this).data('id');
        $.ajax({
          url: '{{url("orderspayonline")}}/'+encodeURI(prdfoId),
          type: "POST",
          cache: false,

          success: function(data) {
            var resultType = document.getElementById('result-type');
            var resultData = document.getElementById('result-data');

            function changeResult(type,data){
              $("#result-type").val(type);
              $("#result-data").val(JSON.stringify(data));
            }

            snap.pay(data, {
              onSuccess: function(result){
                changeResult('success', result);
                console.log(result.status_message);
                console.log(result);
                $("#payment-form").submit();
              },
              onPending: function(result){
                changeResult('pending', result);
                console.log(result.status_message);
                $("#payment-form").submit();
              },
              onError: function(result){
                changeResult('error', result);
                console.log(result.status_message);
                $("#payment-form").submit();
              }
            });
          }
        });
    });
</script>

Часть, которой мне нужно манипулироватьsnap.pay(data, {, где результаты возвращаются.

В настоящее время они возвращаются в консоли и исчезают через секунду в результате echo $snap_token; в моем контроллере. Я пытался получить их в скрытом вводе , но, как я уже говорил, я не могу получить результаты, потому что не могу изменить свой код try, даже я пытался получить их после закрытия catch части,происходит то же самое Ошибка .

Вопрос

  1. Как мне получить результаты в контроллере?

Мне нужнообновить базу данных с этими результатами.

Спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Из того, что я вижу, у вас есть два варианта.

  1. Добавьте еще один AJAX-вызов на стороне клиента в функции snap.pay
  2. Перенаправьте отправку payment-form в ваше собственное приложение, а затем выполните последующую отправку со стороны сервера.

Вариант 1:

function serverSubmit(d) {
    $.ajaxSetup({
        headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
    });

    $.ajax({
      url: '{{url("newroute")}}',
      type: "POST",
      cache: false,
      data: d
     });
};

Затем измените snap.pay для отправки, например

snap.pay(data, {
    onSuccess: function(result){
        changeResult('success', result);
        console.log(result.status_message);
        console.log(result);
        serverSubmit(result); // <----------
        $("#payment-form").submit();
    }
    ...

Возможно, вы захотитезашифруйте данные, если они чувствительны, и вы можете решить не отправлять форму, если вы не получили успешный результат от serverSubmit.Вы также можете отправить дополнительные данные за пределами result, но это только начало.

Вариант 2

Измените <form id="payment-form... action на {{url('newroute')}}

В вашем контроллере добавьте новый метод и сопоставьте ему post newroute.

public function new_method(Request $request)
{
      $data = $request->validate(...);
      YourModel::create($data); //however you want to save it

      $url = 'old_form_submit_URL';

      $options = array(
          'http' => array(
              'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
               'method'  => 'POST',
               'content' => http_build_query($data)
          )
      );

      $context  = stream_context_create($options);
      $result = file_get_contents($url, false, $context);

      if ($result === FALSE) { /* There was an error */ }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...