Laravel使用Ajax将数据传递到控制器并从控制器获取响应

时间:2018-06-26 06:47:56

标签: php jquery laravel

我在控制器中的代码工作正常,我对其进行了测试,但是现在我想使用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 :(得分:1)

如果您要开发Rest API,最好不要添加令牌。

如果您使用的是5.45.5,则可以使用api.php代替web.php。在api.php中,您无需在发布请求时进行令牌验证。

如果您使用的是web.php,那么您将放弃令牌。这是官方文件

从CSRF保护中排除URI

<?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',
    ];
}

答案 1 :(得分:0)

您应该查看控制台并检查错误是什么,但是我注意到的一件事是您需要

  

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

答案 2 :(得分:0)

在try catch块中编写代码,并返回异常并检查错误

p for [i in "001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100"] i."/data.dat" w l not

我对您的js做了一些修改

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(),  
            ));
        }
    }