VUE+ElementUI+vue-resource请求http

本文详细介绍了如何在Vue项目中使用vue-resource插件发起HTTP请求,包括安装、配置及使用方法,通过一个IP查询接口的实例,展示了如何解析响应数据并展示在ElementUI的表格中。

背景

想要前后端分离,前端用vue-resource请求后台接口。

步骤

1. 安装vue-source

在cmd窗口中执行命令:

npm install vue-resource

2. 引入vue-resource

在入口文件main.js中引入vue-resource,添加如下代码即可:

import VueResource from 'vue-resource'
Vue.use(VueResource)

3. 发起请求

上述步骤完成之后,即可在你要发起请求的vue文件中进行请求了。用于测试的接口是一个IP查询的接口:

http://ip.tianqiapi.com/?ip=

可以查询IP的一些简单信息,支持多个IP查询,IP之间用半角逗号间隔。该接口返回IP的JSON格式的信息。
vue文件中HTML部分的代码如下,使用了ElementUI的输入框和表格:

<template>
    <div>
        <el-input v-model="input1" id="inputText"></el-input>
        <el-button type="primary" @click="getData()">查询IP信息</el-button>
        <br>
            <el-table :data="data1" stripe>
                <el-table-column prop="ip" label="IP地址" width="140">
                </el-table-column>
                <el-table-column prop="country" label="国家" width="120">
                </el-table-column>
                <el-table-column prop="province" label="省份">
                </el-table-column>
                <el-table-column prop="city" label="城市">
                </el-table-column>
                <el-table-column prop="isp" label="服务供应商">
                </el-table-column>
            </el-table>
    </div>
</template>

js部分的代码如下:

<script>
    export default {
        name: "xuanxiang2",
        data(){
            return {
                data1 : [],
                input:''
            }
        },
        methods:{
            getData(){
                var text = document.getElementById("inputText").value;
                var api = "http://ip.tianqiapi.com/?ip="+text;//查询IP地址
                this.$http.get(api).then(function (response) {
                    console.log(typeof response.body);
                    if(typeof response.body == "object"){
                        var tmp=[];
                        for(var key in response.body){
                            //key是属性,object[key]是值
                            tmp.push(response.body[key]);//往数组中放值
                        }
                        this.data1 = tmp;
                    } else
                        this.data1 = response.body;
                },function (err) {
                    console.log(err);
                })
            }
        },
        mounted(){
            // this.getData();
        },
    }
</script>

如此即可完成一次http的请求。

说明

this.$http.get即为发起get请求的语法,其他的还有:

get请求:

this.$http.get(URL,{
params:{
key:value,
}
}).then(function(success){
//TODO: 成功后的操作
},function(error){
//TODO:失败后的操作
})

jsonp请求(跨域请求):

this.$http.jsonp(URL,{
params:{
key:value,
}
}).then(function(success){
//TODO: 成功后的操作
},function(error){
//TODO:失败后的操作
})

post请求:

this.$http.post(URL,{
params:{
key:value,
}
}).then(function(success){
//TODO: 成功后的操作
},function(error){
//TODO:失败后的操作
})

js中的data{return{}}部分,是对页面内的变量的初始化:

data(){
   return {
     data1 : [],  //定义一个叫data1的变量,[]表示其类型为Array
     input1:''  //定义一个叫input1的变量,''表示其类型为String
   }
 }

下面的是elementUI的table组件,:data="data1"是绑定数据源,表格会加载data1中的数据(所以在data()中定义的data1是[]类型),stripe是对表格加了条纹显示,便于查看;el-table-column中的prop对应接口返回的json中的key值,label是表头:

<el-table :data="data1" stripe>
	<el-table-column prop="ip" label="IP地址" width="140">
    </el-table-column>
    <el-table-column prop="country" label="国家" width="120">
    </el-table-column>
    <el-table-column prop="province" label="省份">
    </el-table-column>
    <el-table-column prop="city" label="城市">
    </el-table-column>
    <el-table-column prop="isp" label="服务供应商">
    </el-table-column>
</el-table>

对于input标签,其v-model属性表示这个输入框的输入内容的类型,并通过该属性对input框的输入值做初始化,没有这个属性的话,input框无法输入。我的理解是,通过data()中定义的变量input1对input的初始输入值做了初始化,之后用户的输入内容相当于对input1这个变量做赋值操作:

<el-input v-model="input" id="inputText"></el-input>

button按钮中的@click="getData()"是对按钮绑定了鼠标单击事件:

<el-button type="primary" @click="getData()">查询IP信息</el-button>

以上就是对所有代码的解释了。

效果图

最后附上完整的代码和效果图:
代码:

<template>
    <div>
        <br>
        <hr>
        <el-input v-model="input" id="inputText"></el-input>
        <el-button type="primary" @click="getData()">查询IP信息</el-button>
        <br>
        <el-table :data="data1" stripe>
            <el-table-column prop="ip" label="IP地址" width="140">
            </el-table-column>
            <el-table-column prop="country" label="国家" width="120">
            </el-table-column>
            <el-table-column prop="province" label="省份">
            </el-table-column>
            <el-table-column prop="city" label="城市">
            </el-table-column>
            <el-table-column prop="isp" label="服务供应商">
            </el-table-column>
        </el-table>
    </div>
</template>

<script>
    export default {
        name: "xuanxiang2",
        data(){
            return {
                data1 : [],
                input:''
            }
        },
        methods:{
            getData(){
                var text = document.getElementById("inputText").value;
                var api = "http://ip.tianqiapi.com/?ip="+text;//查询IP地址
                this.$http.get(api).then(function (response) {
                    console.log(response.body);
                    if(typeof response.body == "object"){
                        var tmp=[];
                        for(var key in response.body){
                            //key是属性,object[key]是值
                            tmp.push(response.body[key]);//往数组中放值
                        }
                        this.data1 = tmp;
                    } else
                        this.data1 = response.body;
                },function (err) {
                    console.log(err);
                })
            }
        },
        mounted(){
            // this.getData();
        },
    }
</script>

<style scoped>

</style>

HTTP请求效果图

### 实现基于 VueElementUI 和 SpringBoot 的文件上传功能 要实现这一功能,可以按照以下方式构建前端和后端逻辑。 #### 前端部分 (Vue + ElementUI) 在前端,可以通过 `el-upload` 组件来完成文件上传的功能。以下是具体的代码示例: ```html <template> <div> <!-- 使用 el-upload 组件 --> <el-upload class="upload-demo" action="http://localhost:8080/upload" <!-- 设置后端接收接口地址 --> :on-success="handleSuccess" :before-upload="beforeUpload"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </div> </template> <script> export default { methods: { beforeUpload(file) { const isJPGorPNG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500K = file.size / 1024 < 500; if (!isJPGorPNG) { this.$message.error('仅支持上传 JPG 或 PNG 文件'); } if (!isLt500K) { this.$message.error('文件大小不得超过 500KB'); } return isJPGorPNG && isLt500K; }, handleSuccess(response, file, fileList) { this.$message.success(`文件 ${file.name} 已成功上传`); } } }; </script> ``` 上述代码实现了基本的文件上传界面以及验证逻辑[^3]。其中: - **action 属性**指定了文件上传的目标 URL。 - **before-upload 方法**用于在文件上传前执行校验操作。 - **on-success 方法**会在文件上传成功后触发回调函数。 --- #### 后端部分 (SpringBoot) 在后端,需要创建一个控制器方法来处理文件上传请求。以下是具体实现: ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/upload") public class FileController { @PostMapping public String uploadFile(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "失败:未检测到任何文件"; } try { // 获取原始文件名 String fileName = file.getOriginalFilename(); // 将文件保存至服务器指定目录(此处仅为演示) byte[] bytes = file.getBytes(); Path path = Paths.get("uploads/" + fileName); Files.write(path, bytes); return "成功:" + fileName + "已上传"; } catch (Exception e) { e.printStackTrace(); return "失败:文件上传过程中发生错误"; } } } ``` 此代码片段展示了如何通过 SpringBoot 接收并存储上传的文件。主要步骤如下: - 定义了一个 `/upload` 路径作为文件上传目标。 - 利用了 `MultipartFile` 类型参数获取客户端发送过来的文件对象。 - 对接收到的文件进行了简单的非空判断,并将其保存到了本地磁盘中的特定位置。 --- #### 配置跨域访问 如果前后端部署在同一台机器的不同端口下,则可能遇到 CORS (Cross-Origin Resource Sharing)问题。可以在 SpringBoot 中全局配置允许跨域请求: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .maxAge(3600) .allowCredentials(true); } } ``` 这样就可以解决因跨域引发的问题[^1]。 --- ### 总结 以上就是利用 VueElementUI 和 SpringBoot 构建文件上传功能的整体流程。需要注意的是,在实际开发环境中还需要考虑安全性因素,比如对文件类型的进一步过滤、防止恶意脚本注入等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值