使用VueJS和Axios从Laravel获取多个GET API数据响应的方法
P粉729198207
P粉729198207 2023-08-29 21:33:50
[Vue.js讨论组]
<p>这是我的Laravel PenilaianController:</p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code>public function index() { // $penilaian1 = PenilaianTahap1::join('peserta_t1', 'nilai_t1.nim', '=', 'peserta_t1.nim') -&gt;join('pendaftar', 'peserta_t1.nim', '=', 'pendaftar.nim') -&gt;join('sub_kriteria_t1', 'nilai_t1.id_sk1', '=', 'sub_kriteria_t1.id_sk1') -&gt;join('kriteria_t1', 'sub_kriteria_t1.id_k1', '=', 'kriteria_t1.id_k1') -&gt;get([ 'nilai_t1.nim', 'pendaftar.nama', 'nilai_t1.nilai', 'nilai_t1.id_sk1' ]); $subkriteria = SubKriteriaTahap1::join('kriteria_t1', 'sub_kriteria_t1.id_k1', '=', 'kriteria_t1.id_k1') -&gt;get([ 'sub_kriteria_t1.sub_kriteria', 'sub_kriteria_t1.bobot', ]); $kriteria = KriteriaTahap1::all(); $response = [ 'message' =&gt; 'Data pendaftar OR Sinema XI', 'datanilai' =&gt; $penilaian1, 'subkriteria' =&gt; $subkriteria, 'kriteria' =&gt; $kriteria ]; return response()-&gt;json($response, Response::HTTP_OK); }</code></pre> </p> <p>这是通过GET API从PenilaianController获取的数据结果:</p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code>{"message":"Data pendaftar", "datanilai":[ {"nim":2810112045,"nama":"Annisa indra","nilai":0,"id_sk1":11}, {"nim":2810522035,"nama":"Muhammad fakhri naufal","nilai":0,"id_sk1":11}, {"nim":2810112045,"nama":"Annisa indra","nilai":0,"id_sk1":12}, {"nim":2810522035,"nama":"Muhammad fakhri naufal","nilai":0,"id_sk1":12}, {"nim":2810112045,"nama":"Annisa indra","nilai":5,"id_sk1":13}, {"nim":2810522035,"nama":"Muhammad fakhri naufal","nilai":0,"id_sk1":13}, {"nim":2810112045,"nama":"Annisa indra","nilai":2,"id_sk1":21}, {"nim":2810522035,"nama":"Muhammad fakhri naufal","nilai":5,"id_sk1":21}, {"nim":2810112045,"nama":"Annisa indra","nilai":7,"id_sk1":31}, {"nim":2810522035,"nama":"Muhammad fakhri naufal","nilai":7,"id_sk1":31} ],"subkriteria":[ {"sub_kriteria":"Tanggung Jawab","bobot":40}, {"sub_kriteria":"Keaktifan","bobot":30}, {"sub_kriteria":"Teamwork","bobot":30}, {"sub_kriteria":"Wawancara","bobot":1}, {"sub_kriteria":"Tes Bakat","bobot":1} ],"kriteria":[ {"id_k1":1,"kriteria":"Forum Group Discussion","bobot":33.3}, {"id_k1":2,"kriteria":"Wawancara","bobot":33.3}, {"id_k1":3,"kriteria":"Tes Bakat","bobot":33.3} ]}</code></pre> </p> <p>这是我的VueJS“peniliaian”index.vue页面的代码:</p> <p> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"&gt;&lt;/script&gt; &lt;template&gt; &lt;div class="container my-5"&gt; &lt;div class="row justify-content-center"&gt; &lt;div class="class col-12"&gt; &lt;div class="card rounded shadow"&gt; &lt;div class="card-header"&gt; Data Pendaftar &lt;/div&gt; &lt;div class="card-body"&gt; &lt;table class="table"&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;NIM&lt;/th&gt; &lt;th&gt;Nama&lt;/th&gt; &lt;th v-for="subkriteria in subkriteria" :key="subkriteria.id_sk1"&gt; {{ subkriteria.sub_kriteria }}&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr v-for="(penilaian1, index) in penilaian1.datanilai" :key="index"&gt; &lt;td&gt;{{ penilaian1.nim }}&lt;/td&gt; &lt;td&gt;{{ penilaian1.nama }}&lt;/td&gt; &lt;td&gt;{{ penilaian1.gender }}&lt;/td&gt; &lt;td&gt; &lt;div class="btn-group"&gt; &lt;router-link :to="{ name: 'penilaian1.show', params:{id: penilaian1.id}}" class="btn btn-sm btn-outline-info"&gt;Show&lt;/router-link&gt; &lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import axios from 'axios' import {onMounted, ref} from 'vue' export default { setup() { // reactivate state let penilaian1, subkriteria, kriteria = ref([]) onMounted(() =&gt; { //get data from API endpoint axios.get('http://127.0.0.1:8000/api/penilaian1') .then((result) =&gt; { penilaian1.value = result.data.datanilai, subkriteria.value = result.data.subkriteria, kriteria.value = result.data.kriteria }).catch((err) =&gt; { console.log(err.response) }); }); return { penilaian1, subkriteria, kriteria } } } &lt;/script&gt;</code></pre> </p> <p>但是VueJS出现了错误:</p> <pre class="brush:php;toolbar:false;">D:\Technolife\Coding\spk-or-as-client\src\views\penilaian1\index.vue:20 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'datanilai')</pre> <p>问题是,我如何正确地通过VueJS Axios调用多个API响应,例如'datanilai','subkriteria'和'kriteria'?当我定义单个响应,例如'data'(之前的'datanilai'的名称),它可以正常运行。</p>
P粉729198207
P粉729198207

全部回复(1)
P粉697408921

您已经将result.data.datanilai分配给了penilaian1。请参见以下代码:

axios.get('http://127.0.0.1:8000/api/penilaian1')
  .then((result) => {
    penilaian1.value = result.data.datanilai
    // ...
  });

您应该可以像这样编写循环(删除.datanilai):

<tr v-for="(penilaian, index) in penilaian1" :key="index">
  <td>{{ penilaian.nim }}</td>
  <td>{{ penilaian.nama }}</td>
  <td>{{ penilaian.gender }}</td>
  <td>
    <div class="btn-group">
      <router-link
        :to="{ name: 'penilaian.show', params:{id: penilaian.id}}"
        class="btn btn-sm btn-outline-info">Show</router-link>
    </div>
  </td>
</tr>

顺便说一句:v-for="subkriteria in subkriteria"真的有效吗?我会使用不同的变量名,比如v-for="sk in subkriteria"

<th v-for="sk in subkriteria" :key="subkriteria.id_sk1">
  {{ sk.sub_kriteria }}</th>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号