Laravel использует ajax для передачи данных в контроллер и получения ответа от контроллера - PullRequest
0 голосов
/ 26 июня 2018

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

Я думаюУ меня что-то не так в коде Ajax.

home.blade

<input type="text" id="postal_code" onFocus="geolocate()">
<input type="text" id="totaldistance"  onFocus="geolocate()">
<button id="save_address">Save</button>
$(document).on('click', '#save_address', function(e){
  $.ajax({
    type: 'POST',
    url: '/Get_distance',
    data: {
      '_token': $('input[name=_token]').val(),
      'currentadd': $('#postal_code').val(), 
    },
    success: function(data) {
      $('#totaldistance').val(data.distance); 
    }
  });
});

web.php

Route::post('/Get_distance','HomeController@getdistance');

контроллер

public function getdistance(Request $request)
{
  $currentaddress =$request->currentadd;
  $from = '4429 North Broadway, Chicago, IL, United States';
  $remFrom = str_replace(',', '', $from); //Remove Commas
  $from = urlencode($remFrom);
  $to = $currentaddress;
  $remTo = str_replace(',', '', $to); //Remove Commas
  $to = urlencode($remTo);
  $data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");
  $data = json_decode($data,true);
  $distance = $data['rows'][0]['elements'][0]['distance']['text'];
  return Response::json(array(
    'distance' => $distance,  
  ));
}

консоль

enter image description here enter image description here

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Напишите ваш код в блоке try catch, верните исключение и проверьте ошибку

public function getdistance(Request $request)
    {
        try{
            $currentaddress =$request->input('currentadd');
            $from = '4429 North Broadway, Chicago, IL, United States';
            $remFrom = str_replace(',', '', $from); 
            $from = urlencode($remFrom);
            $to = $currentaddress;
            $remTo = str_replace(',', '', $to); 
            $to = urlencode($remTo);
            $data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");
            $data = json_decode($data,true);
            $distance = $data['rows'][0]['elements'][0]['distance']['text'];
            return Response::json(array(
                'distance' => $distance,  
            ));
        } catch(\Exception $e)
        {
            return Response::json(array(
                'exception' => $e->getMessage(),  
            ));
        }
    }

Я немного изменил ваш js

    $(document).on('click', '#save_address', function(e){
      $.ajaxSetup({
          headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
         }
     });
      $.ajax({
        type: 'POST',
        url: '/Get_distance',
        data: {
          '_token': $('input[name=_token]').val(),
          'currentadd': $('#postal_code').val(), 
        },
        success: function(data) {
          console.log(data) //console the elements of data
          $('#totaldistance').val(data.distance); 
        }
      });
    });
0 голосов
/ 26 июня 2018

Если вы разрабатываете rest apis, лучше не добавлять токен.

Если вы используете 5.4 или 5.5, вы можете использовать api.php вместо web.phpapi.php вам не нужно проверять токен по запросу после отправки.

Если вы используете web.php, вы исключаете токен.Вот официальная документация

Исключение URI из защиты CSRF

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'Get_distance',
    ];
}
0 голосов
/ 26 июня 2018

Вы должны заглянуть в свою консоль и проверить, что это за ошибка, но я заметил одну вещь: вам нужно

$ currenttaddress = $ request-> input ('curentadd');

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