【问题标题】:Laravel - How to call a controller function via AJAX (jQuery)Laravel - 如何通过 AJAX (jQuery) 调用控制器函数
【发布时间】:2018-07-27 07:10:22
【问题描述】:

我有许多可用的控制器功能,但是,为了可用性,我想将其中一些切换为通过 AJAX 调用。

这是我的 jQuery 代码:

$.ajax({
        method: 'GET',
        url: $(this).data('url'),
        data: {},
        success: function( response ){
            console.log( response );
        },
        error: function( e ) {
            console.log(e);
        }
    });

这是我的控制器功能:

public function add( $user_id, $project_id )
{

    $project = Project::findOrFail( $project_id );

    if( empty( $project ) ) {

        return view( 'home' )->with('message', 'Sorry, user not found');

    }

    if ( $project->user_id != $user_id ) {

        $scrapbook = Scrapbook::firstOrNew(['user_id' => $user_id]);

        $scrapbook->save();

        $scrapbook->projects()->attach($project_id);

        return true;

    } else {

        return false;

    }
}

就目前而言,控制器功能实际上做了它应该做的事情(将项目添加到剪贴簿)。但它返回的是导致 AJAX 请求归类为 error 所以我无法正确处理。我假设我应该返回某种响应对象,但我不知道这是什么或它需要包含什么。

【问题讨论】:

    标签: ajax laravel function controller response


    【解决方案1】:

    您可以简单地返回一个包含成功或失败的数组。

    $output_data = ['response' => true, 'message' => 'request is successful.' ];
    $output_data = ['response' => false, 'message' => 'error message for user.' ];
    return $output_data;
    

    这将在 ajax 的成功块中返回控制。 您可以检查responsetrue 还是false 并相应地执行代码。

    【讨论】:

      【解决方案2】:

      您可以在成功时返回一个 json 响应:

      public function add( $user_id, $project_id )
      {
          // Other code ...
      
          $isSuccess = false;
      
          if ($project->user_id != $user_id) {
      
              $scrapbook = Scrapbook::firstOrNew(['user_id' => $user_id]);
      
              if ($isSuccess = $scrapbook->save()) {
                  // only attach it if successfully saved
                  $scrapbook->projects()->attach($project_id);
              }
      
          }
      
          return response()->json([
              'success' => $isSuccess
          ]);
      }
      

      所以在您的ajax 回复中,您可以查看:

      success: function( response ){
          console.log( response.success ); // true or false
      }
      

      【讨论】:

        【解决方案3】:

        您需要使用json() 函数返回json response

        return response()->json(true);
        

        或者如果想发回额外的数据

        return response()->json([
           'message' => 'successfull',
           'items' =>$insertedItems
        ],200);
        

        或失败

        return response()->json(['error'=>'error text'],$statusCode)
        

        【讨论】:

          【解决方案4】:

          在路线中:

          Route::get('/url', 'controller_name@controller_function');
          

          阿贾克斯:

          $.ajax({
              method: 'GET',
              url: 'url',
              data: {},
              success: function( response ){
                  console.log( response );
              },
              error: function( e ) {
                  console.log(e);
              }
          });
          

          作为响应,发送json:

          return response()->json(['message' => 'successfull'],200);
          

          【讨论】:

          • 如果我够快,我会发的哈哈。
          猜你喜欢
          • 2014-11-18
          • 1970-01-01
          • 1970-01-01
          • 2018-04-19
          • 2017-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多