Laravel 使用 ajax 获取并发布到外部 php 控制器

Posted

技术标签:

【中文标题】Laravel 使用 ajax 获取并发布到外部 php 控制器【英文标题】:Laravel get and post to an external php controller with ajax 【发布时间】:2017-09-11 17:06:04 【问题描述】:

我正在开发 laravel 项目,我需要将 AJAX 发布到 laravel 中的自定义函数,并获得对我的自定义视图的响应。

我有提款机

    /app/Http/VatHelperController.php

    <?php
    
    namespace App\Http\Controllers;
    
    use Request;
    
    use App\Http\Requests;
    
    use App\Http\Response;
    
    use Illuminate\Support\Facades\Input;
    
    class VatHelperController extends Controller
           
        public function recieve()
            $data = '555';
            return View::make('clients.edit', $data);
        
            
    

    在 routes.php 里面

     // Vatchecker get post
     Route::post('/vat', 'VatHelperController@receive');
     Route::get('/vat', 'VatHelperController@receive');
    

    在客户端/edit.blade.php 中

     <div class="row">
     <form>
     <input type="text" id="input-vat">
     <input type="submit" id="btn-test-submit">
     </form>
     <p>Result :</p>
     <p class="test-result"></p>
     </div>
    
     <script>
         $('#btn-test-submit').click(function(e)
             e.preventDefault();
             var vat_value = document.getElementById('input-vat').value;
             var url = "http://185.81.165.216/index.php/vat";
             if (vat_value !== "" && vat_value.length < 20)
                 $.ajax(
                     url: url,
                     type: 'POST',
                     data: vat_value,
                     dataType: 'json',
                     beforeSend: function(xhr)xhr.setRequestHeader('X-CSRF-TOKEN', $("#token").attr('content'));,
                     done: function(data)
                        $('.test-result').text('done');
                     ,
                     error: function()
                         $('.test-result').text("didnt");
                     
                 )
                 $('.test-result').text(vat_value);
             
             else if (vat_value.length > 20)
                 $('.test-result').text('Your entered value is to long. Max lenght 20 char.');
             
             else
                $('.test-result').text('You have to enter value.');
             
                    $.get('index.php/vat', function()
                 console.log('response');
             );
         );
     </script>
    

我的最终目标是制作表单并将数据与 post 一起发送到 helper 内部的函数并获得对 js 的响应,并在 table 中回显它,我唯一不知道的是如何在 laravel 中发布和获取。

【问题讨论】:

vathelper 必须是控制器 【参考方案1】:

在主项目目录中运行此命令:

php artisan make:controller VatHelperController

然后将其添加到 routes/web.php

Route::post('/vat', 'VatHelperController@receive');

然后将此函数添加到VatHelperController:

public function receive (Request $request)

    // print all data sent
    print_r( $request->all() );
    // access particular data by:
    echo $request->input('name');


最后你可以在想要的视图文件中添加这部分JS:

window.onload = funtion () 
    $.ajax(
      type: "POST",
      url: "/vat",
      data: name:"YourName",
      success: function() ,
      dataType: "json"
    );

例如,您还可以在 JS 代码中使用位刀片变量

data: name: $php_var 

阅读更多关于刀片模板中的 PHP 变量here

【讨论】:

通过ajax访问/vat时出现404是什么意思?【参考方案2】:

您的代码中有些东西有点不对劲。

    vathelper 看起来不像控制器。为了能够通过 HTTP 访问它,它必须是一个控制器。否则路由系统无法与之交互。

    您不必自动加载您的类。它们已经在 \App 命名空间中自动加载。

    clients.vat 是一个奇怪的名字。它会让浏览器认为它可能正在访问.vat 文件,不管它是什么。你应该叫它/clients/vat

【讨论】:

以上是关于Laravel 使用 ajax 获取并发布到外部 php 控制器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5:在路由中获取 ajax 数据并传递给控制器

使用 Laravel 发送 Ajax 请求

onclick 使用 ajax laravel 从数据库中获取数据

Laravel:使用 jquery ajax api 发布数据来存储数据时获取 405 Method Not Allowed

如何从控制器获取记录到 Ajax laravel 5.2

从 laravel 调用 HTTPS 请求到外部 API