Estoy trabajando con Laravel 5.8 y quería aplicar un sistema de código de descuento para mi sitio.
Así que intenté enviar datos con Ajax así:
$.ajax({ type: 'POST', url: baseurl + 'discount/register', data: { coupon_code: finalDiscountValue, course_id: itemCourse, }, dataType: "json", success: function (data) { if(data == 99) { swal("Wrong discount code"); } else if (data == 130) { window.location.href = {!! json_encode(route('myCourseList')) !!} } else{ window.location.href = {!! json_encode(route('payCourseRegistrationWithDiscount', ['course'=>$item->cor_id,'value'=>$data['cartValueDiscountedWithCode'] ?? ''])) !!} } } }); Ahora mi problema es $data['cartValueDiscountedWithCode'] que no se envía al nombre de ruta definido.
Y esto se debe a que $data se devuelve en Ajax y su tipo es diferente de la otra variable que es $item->cor_id y es una variable basada en Laravel.
Así es como devuelvo $data en el controlador:
public function registerWithDiscount() { $courseId = request('course_id'); $findCourse = Course::find($courseId); $getCoursePrice = $findCourse->cor_price; if ( request('course_id') == null ) { return 97; // The input was empty } ... $data['cartValueDiscountedWithCode'] = $getCoursePrice - $value_discounted; $data['discountedPrice'] = $value_discounted; $data['coupon_id'] = $coupon->id; $data['coupon_name'] = $coupon->name; if($data['discountedPrice'] >= $getCoursePrice){ $this->registerDiscountFree($courseId,$data['cartValueDiscountedWithCode']); session()->flash('registrationMessage', 'Your registration is completed'); return 130; // if the discount code makes the course free }else{ return $data; // if the remainer balance still needs to pay } }Puedes probar esto:
let url = "{{ route('payCourseRegistrationWithDiscount',['course'=>$item->cor_id,'value'=>':cartValueDiscountedWithCode']) }}"; url = url.replace(':cartValueDiscountedWithCode', data.cartValueDiscountedWithCode); window.location.href = url;No puede pasar el valor de respuesta ajax así. En su lugar, agregue una cadena dentro de la ruta y luego reemplace con el valor de respuesta