我正在尝试为数据库中的用户更新字段,并且我正在尝试使用ajax。我有一个资源(粉丝),在我的FansController中,我有一个函数update($ id):

我像这样使用ajax调用:

var full_name = $("#user_name").val();
var full_location = $("#user_city").val();

request = $.ajax({
          url: "http://url.com/fans/update",
          type: "post", success:function(data){console.log(data);},
          data: {'full_name': full_name, 'full_location': full_location} ,beforeSend: function(data){
            console.log(data);
          }
  });


full_name和full_location越来越好。我不确定它们是否正确传递给函数。 console.logs可以很好地记录日志,但是它们没有在控制台中显示正确的数据(它只是打印整个源代码)。

更新功能:

public function update($id)
        {

            //get saved info from fan profile
            $full_name = Input::get('full_name');
            $full_location = Input::get('full_location');

            //echo var_dump($full_name);

            $split_name = explode(" ", $full_name);

            $first_name = $split_name[0];

            $i=0;
            foreach ($split_name as $name) {

                if($i > 0) {
                    $last_name = $name[i] + " ";
                }
                $i++;
            }

            $trimmed_last_name = trim($last_name);


            //find user
            $fan = Fan::where('id', '=', $id)->first();

            $fan->first_name = $first_name;
            $fan->last_name = $trimmed_last_name;

            $fan->save();
        }


数据库未更新,因此我假设未调用该函数(即使ajax显示成功)。我有什么想念的吗?谢谢。

最佳答案

转到终端/命令提示符,然后键入并运行以下命令:

php artisan routes


这将返回如下信息(有关在应用程序中声明的所有路由的详细信息):

+--------+---------------------------------------------------------------+---------------+-------------------------------+----------------+---------------+
| Domain | URI                          |  Name         |  Action                  | Before Filters | After Filters |
+--------+---------------------------------------------------------------+---------------+-------------------------------+----------------+---------------+
|        | GET posts                    | posts.index   | PostController@index     |                |               |
|        | GET posts/c                  | posts.create  | PostController@create    |                |               |
|        | POST posts                   | posts.store   | PostController@store     |                |               |
|        | GET posts/{posts}            | posts.show    | PostController@show      |                |               |
|        | GET posts/{posts}/edit       | posts.edit    | PostController@edit      |                |               |
|        | PUT posts/{posts}            | posts.update  | PostController@update    |                |               |
|        | PATCH posts/{posts}          |               | PostController@update    |                |               |
|        | DELETE posts/{posts}         | posts.destroy | PostController@destroy   |                |               |
+--------+---------------------------------------------------------------+---------------+-------------------------------+----------------+---------------+


从此结果中,找出适合用于该方法的url。在这种情况下,对于使用update请求PATCHmethod方法,您可以使用如下所示的内容:

posts/10


由于它是资源控制器,因此您可以使用以下内容:

$.ajax({
    url: "fans/10", // 10 is user id to update, for example
    type: "post",
    data: { full_name:full_name, full_location:full_location, _method:"PATCH" },
    success:function(data){
        console.log(data);
    }
});


因此,您的update方法将被匹配,因为您的update方法如下所示:

public function update($id)
{
    //...
}


根据您的url,您应该声明以下(资源)路由:

Route::resource('fans', 'FansController');


如果将JS代码保存在一个单独的文件中,则还可能要检查this article,这是关于如何将模型对象从服务器发送到客户端(作为JavaScript对象),这将有助于理解这一点。即将id从服务器发送到客户端,因此您可以在id函数中使用JS

10-06 00:09