[英]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 。
我需要用該結果更新數據庫。
謝謝。
據我所知,您有兩種選擇。
snap.pay
函數中添加另一個客戶端AJAX調用 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.