我想知道是否可以通过另一个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
代码,即使我尝试在{{1}之后获取它们部分关闭,同样的事情发生错误。
我需要使用该结果更新我的数据库。
感谢。
答案 0 :(得分:0)
从我所看到的,你有两个选择。
snap.pay
函数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 */ }
}