亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將數組從 XMLHTTPREQUEST API POST 保存到 Laravel 控制器

如何將數組從 XMLHTTPREQUEST API POST 保存到 Laravel 控制器

藍山帝景 2022-10-21 14:41:35
我想將我的數組保存在從 Javascript XMLHTTP 請求發送的數據庫中。Javascriptfunction xml2() {    var xhttp = new XMLHttpRequest();    xhttp.onreadystatechange = function() {      if (this.readyState == 4 && this.status == 200) {        console.log(JSON.parse(this.responseText));        }    };    xhttp.open("POST", "http://localhost/sekai_adminlte3_rnd/api/rnd/postdata", true);    var singlevar = {"country_name":"Indonesia","country_code":"ID"}    xhttp.send(singlevar);      }laravel 中的控制器public function postdata(Request $request){        $country = Country::create([        'country_code' => $request->get('country_code'),        'country_name' => $request->get('country_name'),    ]);    return $country;}使用此代碼,我無法保存到數據庫。
查看完整描述

2 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

來自文檔: “您也可以使用該create()方法將新模型保存在一行中?!?/p>


您使用該create()方法的方式有點錯誤,因為:“一旦我們使屬性可以批量分配,我們就可以使用 create 方法在數據庫中插入一條新記錄?!?/p>


因此,要么使用該$country->save();方法而不是return $country您在代碼中使用的方法,要么使用更好的方法,使您的Country Model中的字段可填充(可批量分配),例如:


class Country extends Model

{

    /**

     * The attributes that are mass assignable.

     *

     * @var array

     */

    protected $fillable = ['country_code', 'country_name'];

}

然后在你的控制器中你可以使用:


public function postdata(Request $request)

{        

    $country = Country::create([


        'country_code' => $request->get('country_code'),

        'country_name' => $request->get('country_name'),


    ]);


    // return $country; // this one is not needed at all    

}

該create()方法返回保存的模型實例:


鏈接到文檔: https ://laravel.com/docs/7.x/eloquent#mass-assignment


現在,再看一下您的代碼,絕對不可能沒有錯誤(在您的瀏覽器控制臺中),因為我沒有看到隨您的請求發送的任何CSRF 令牌,而且該XMLHttpRequest.send()方法不會將您的數據傳遞給您的 Laravel控制器,因為數據必須采用特定格式。


因此,請確保您擁有 CSRF 令牌。最簡單的方法是將其包含在您的html head喜歡中:


<head>

  <meta name="csrf-token" content="{{ csrf_token() }}">

</head>

然后令牌也必須包含在 Javascript 腳本中。您將在下面的腳本中找到它。


而且由于您要發送的數據看起來像一個關聯的數據數組,因此它應該包含在FormData對象中(作為該send()方法的適當格式),這樣您就不會遇到數據格式和獲取數據的問題在您的控制器中。所以它會按原樣工作。您的腳本應如下所示:


<script>


function xml2() {

    var xhttp = new XMLHttpRequest();

    let token = document.querySelector('meta[name="csrf-token"]').content;


    xhttp.open("POST", "/sekai_adminlte3_rnd/api/rnd/postdata", true);

    xhttp.setRequestHeader('X-CSRF-TOKEN', token);

    

    var singlevar = new FormData;

    singlevar.append('country_name', 'Indonesia');

    singlevar.append('country_code', 'ID');

    xhttp.send(singlevar);

}


</script>

我希望您可以通過上述改進使其工作。如果您的路由和網址都可以,它必須工作。


查看完整回答
反對 回復 2022-10-21
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

像這樣試試


try{

   $country = new Country();

   $country->country_code = $request->get('country_code'); 

   $country->country_name = $request->get('country_name');

   $country->save();

}

catch(\Exception $e){

   dd($e->getMessage());

}


查看完整回答
反對 回復 2022-10-21
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號