簡體   English   中英

通過另一個Ajax將Ajax數據發送到Laravel中的控制器

[英]Sending data of ajax by another ajax to controller in laravel

我想知道是否可以通過一個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;而在echo $snap_token;秒鍾內消失echo $snap_token; 在我的控制器中。 我試圖將它們保存在隱藏的輸入中 ,但是正如我提到的那樣,我無法獲得結果,因為我無法更改try代碼,即使在catch部分關閉后也試圖獲取它們,同樣的事情也會發生Error

  1. 如何在控制器中獲得結果?

我需要用該結果更新數據庫。

謝謝。

據我所知,您有兩種選擇。

  1. snap.pay函數中添加另一個客戶端AJAX調用
  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 */ }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM