功能介绍:
发送POST请求,上传数据到服务器并获取结果,参考文档HTTP数据请求。
知识点:
- 熟悉发送POST异步请求。
- 解析返回的JSON格式数据。
使用环境:
- API 9
- DevEco Studio 4.0 Release
- Windows 11
- Stage模型
- ArkTS语言
所需权限:
- ohos.permission.INTERNET
核心代码片段,发送HTTP异步请求,并获取放回结果,最后解析JSON数据函数:
代码语言:javascript复制 async onRequest() {
this.enabledBtn = false;
let httpRequest = http.createHttp();
// 异步请求
let promise = httpRequest.request(this.llmUrl, {
method: http.RequestMethod.POST,
header: { 'Content-Type': 'application/json; charset=utf-8' },
// 发送的数据
extraData: { "prompt": this.text }
})
promise.then((data) => {
console.info('返回结果: ' data.result)
// 结果转JSON
let result = JSON.parse(data.result.toString())
// 解析结果
this.response = result['response']
this.enabledBtn = true
}).catch((err) => {
console.error('错误信息:' JSON.stringify(err))
})
}
完整代码:
代码语言:javascript复制import http from '@ohos.net.http';
@Entry
@Component
struct Index {
@State text: string = '你叫什么名字?'
@State response: string = ''
@State enabledBtn: boolean = true
private llmUrl: string = "http://xxx.xxxxx"
build() {
RelativeContainer() {
Text(this.response)
// 左对齐
.textAlign(TextAlign.Start)
.width("100%")
// 允许复制文本
.copyOption(CopyOptions.InApp)
.padding({top:10, left:5, right:5})
// 超出部分显示省略号
.textOverflow({ overflow: TextOverflow.Ellipsis })
.maxLines(20)
.alignRules({
top: { anchor: '__container__', align: VerticalAlign.Top },
})
.id('text1')
Row() {
TextInput({ placeholder: '请输入要发送的文本内容', text: this.text })
.width("70%")
.height("100%")
.onChange((value: string) => {
this.text = value
})
Button("发送")
.fontSize(16)
.width("25%")
.height("100%")
.margin({ left: 10 })
.onClick(() => {
this.onRequest()
})
.enabled(this.enabledBtn)
}
.width("100%")
.height(40)
.margin({ bottom: 10 })
.alignRules({
// 相对父组件底部对齐
bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
})
.id("row1")
}
.width("100%")
.height("100%")
}
async onRequest() {
this.enabledBtn = false;
let httpRequest = http.createHttp();
// 异步请求
let promise = httpRequest.request(this.llmUrl, {
method: http.RequestMethod.POST,
header: { 'Content-Type': 'application/json; charset=utf-8' },
// 发送的数据
extraData: { "prompt": this.text }
})
promise.then((data) => {
console.info('返回结果: ' data.result)
// 结果转JSON
let result = JSON.parse(data.result.toString())
// 解析结果
this.response = result['response']
}).catch((err) => {
console.error('错误信息:' JSON.stringify(err))
}).finally(()=>{
this.enabledBtn = true
})
}
}