搜索
您的当前位置:首页正文

ASP.NET使用Ajax返回Json对象的方法

2023-12-09 来源:车融汽车网

一、新建一个html页面,如注册页面"Register.htm"

<!DOCTYPE html><html ><head> <title>用户注册</title> <meta charset="utf-8" /> <style type="text/css"> .msg { color:Red; } </style></head><body> <!-- 因为是ajax提交,html表单控件可以不必放在form里,且不能使用提交按纽(type="submit"),而使用普通按纽(type="button") --> 用户名:<input type="text" name="id" id="id" /><span id="idMsg" class="msg"></span><br /> <!-- span用来显示错误信息 --> 密 码:<input type="password" name="pwd" id="pwd" /><span id="pwdMsg" class="msg"></span><br /> 姓 名:<input type="text" name="name" id="xm" /><span id="nameMsg" class="msg"></span><br /> <input id="btnReg" type="button" value="注册" /> <script type="text/javascript" src="bootstrap/js/jquery.js"> </script> <script src="reg.js" type="text/javascript"></script> </body></html>

二、新建一js文件,如:reg.js

$(function() { //定义清除错误信息的函数 function clearMsg() { $(".msg").html(""); } //定义获取表单数据的函数,注意返回json对象 function formData() { return { id: $("#id").val(), pwd: $("#pwd").val(), name: $("#xm").val() }; } //定义注册功能的函数 function reg() { var url = "Register.ashx"; var data = formData(); clearMsg(); $.ajax({ type: 'GET', //自动会把json对象转换为查询字符串附在url后面如:http://localhost:49521/Register.ashx?id=a&pwd=b&name=c url: url, dataType: 'json', //要求服务器返回一个json类型的数据,如:{"success":true,"message":"注册成功"} contentType: 'application/json',//发送信息给服务器时,内容编码的类型 data: data, //提交给服务器的数据,直接使用json对象的数据,如:{"id":"a","pwd":"b","name":"c"} (如果要求json格式的字符串,可使用用JSON.stringify(data)) success: function(responseData) {//如果响应成功(即200) if (responseData.success == true) {//responseData也是json格式,如:{"success":true,"message":"注册成功"} alert(responseData.message); } else { var msgs = responseData.msgs;//msgs对象是一个数组,如下所示: //{"success":false,"message":"注册失败","msgs":[{"id":"pwdMsg","message":"密码不能为空."},{"id":"nameMsg","message":"姓名不能为空."}]} for (var i = 0; i < msgs.length; i++) { $('#' + msgs[i].id).html(msgs[i].message); } } }, error: function() { //要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: //function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 //this; //调用本次ajax请求时传递的options参数 alert(arguments[1]); } });//ajax } //定义一个初始化函数 function init() { $("#btnReg").click(function() { reg(); }); } //调用初始化函数 init();});

三、处理ajax请求

方法一:手动拼接json字符串

新建一般处理程序,如:Register.ashx

using System;using System.Collections;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using System.Collections.Generic;namespace WebLogin{ /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Register1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json";//设置响应内容的格式是json格式 string id = context.Request["id"]; string pwd = context.Request["pwd"]; string name = context.Request["name"]; List<string> msgList = new List<string>(); if (String.IsNullOrEmpty(id)) { msgList.Add("{"id":"idMsg","message":"用户名不能为空."}"); } if (pwd==null || pwd=="") { msgList.Add("{"id":"pwdMsg","message":"密码不能为空."}");//形如:{"id":"pwdMsg","message":"密码不能为空."} } if (name==null || name=="") { msgList.Add("{"id":"nameMsg","message":"姓名不能为空."}"); } string responseText = ""; if (msgList.Count == 0) { //调用后台代码写入数据库 responseText = "{"success":true,"message":"注册成功"}"; } else { string msgsValue = ""; for (int i = 0; i < msgList.Count; i++) { msgsValue += msgList[i] + ",";//将列表中的每一个字符串连接起来,用","隔开,不过最后还会多"," } msgsValue=msgsValue.Substring(0, msgsValue.Length - 1);//去掉末尾的"," msgsValue = "[" + msgsValue + "]";//用"[]"括起来,如:[{"id":"pwdMsg","message":"密码不能为空."},{"id":"nameMsg","message":"姓名不能为空."}] responseText = "{"success":false,"message":"注册失败","msgs":" + msgsValue + "}"; //最的形如:{"success":false,"message":"注册失败","msgs":[{"id":"pwdMsg","message":"密码不能为空."},{"id":"nameMsg","message":"姓名不能为空."}]} } context.Response.Write(responseText); } public bool IsReusable { get { return false; } } }}

方法二:使用Json.NET工具来将C#对象转换json输出

1、新建信息类“Msg.cs”

using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace WebLogin{ public class Msg { private string id; public string Id { get { return id; } set { id = value; } } private string message; public string Message { get { return message; } set { message = value; } } public Msg(string id, string message) { this.id = id; this.message = message; } }}

2、新建返回json对象的类“ResponseData.cs”

using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Collections.Generic;namespace WebLogin{ public class ResponseData { private bool success; public bool Success { get { return success; } set { success = value; } } private string message; public string Message { get { return message; } set { message = value; } } private List<Msg> msgs; public List<Msg> Msgs { get { return msgs; } set { msgs = value; } } public ResponseData(bool success, string message) { this.success = success; this.message = message; } public ResponseData(bool success, string message, List<Msg> msgs) { this.success = success; this.message = message; this.msgs = msgs; } }}

3、去官网下载Json.NET,并复制引用

官网:http://www.newtonsoft.com/json

下载地址:http://pan.baidu.com/s/1nvz9JBV

下载解压后将“Newtonsoft.Json.dll”复制到项目的“bin”目录中,并引用(注意和.net版本保持一致)

4、新建一般处理程序“reg.ashx”

using System;using System.Collections;using System.Data;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;using System.Collections.Generic;using Newtonsoft.Json;//引入namespace WebLogin{ /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class reg : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json";//设置响应内容的格式是json格式 string id = context.Request["id"]; string pwd = context.Request["pwd"]; string name = context.Request["name"]; List<Msg> msgs = new List<Msg>(); if (String.IsNullOrEmpty(id)) { msgs.Add(new Msg("idMsg", "用户名不能为空.")); } if (String.IsNullOrEmpty(pwd)) { msgs.Add(new Msg("pwdMsg", "密码不能为空.")); } if (String.IsNullOrEmpty(name)) { msgs.Add(new Msg("nameMsg", "姓名不能为空.")); } ResponseData rData; if (msgs.Count == 0) { //调用注册方法,写入数据库 rData = new ResponseData(true, "注册成功."); } else { rData = new ResponseData(false, "注册失败.", msgs); } context.Response.Write(JsonConvert.SerializeObject(rData));//直接调用方法将rData转换为json字符串 } public bool IsReusable { get { return false; } } }}

四、完成效果如图

以上所述是小编给大家介绍的ASP.NET使用Ajax返回Json对象的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

小编还为您整理了以下内容,可能对您也有帮助:

asp如何获取ajax()提交的json数据

bytecount = Request.TotalBytes
bytes = Request.BinaryRead(bytecount)
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1 'adTypeBinary
stream.Open()
stream.Write(bytes)
stream.Position = 0
stream.Type = 2 'adTypeText
stream.Charset = "utf-8"
s = stream.ReadText() 'here is your json as a string
stream.Close()
Set stream = nothing
Response.write(s)
得到的s就是json格式的字符串,就象{"userid":"apple","password":"test123456"}
然后再利用其它工具可以将json字符串中的相关信息提取出来。这个网上有很多示例。

asp如何获取ajax()提交的json数据

bytecount = Request.TotalBytes
bytes = Request.BinaryRead(bytecount)
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 1 'adTypeBinary
stream.Open()
stream.Write(bytes)
stream.Position = 0
stream.Type = 2 'adTypeText
stream.Charset = "utf-8"
s = stream.ReadText() 'here is your json as a string
stream.Close()
Set stream = nothing
Response.write(s)
得到的s就是json格式的字符串,就象{"userid":"apple","password":"test123456"}
然后再利用其它工具可以将json字符串中的相关信息提取出来。这个网上有很多示例。

有关$.ajax()方法中如何从服务器获取json数据

下面我就为大家分享一篇基于$.ajax()方法从服务器获取json数据的几种方式总结,具有很好的参考价值,希望对大家有所帮助。

一.什么是json

json是一种取代xml的数据结构,和xml相比,它更小巧但描述能力却很强,网络传输数据使用流量更少,速度更快。

json就是一串字符串,使用下面的符号标注。

{键值对} : json对象

[{},{},{}] :json数组

"" :双引号内是属性或值

: :冒号前为键,后为值(这个值可以是基本数据类型的值,也可以是数组或对象),所以 {"age": 18} 可以理解为是一个包含age为18的json对象,而[{"age": 18},{"age": 20}]就表示包含两个对象的json数组。也可以使用{"age":[18,20]}来简化上面的json数组,这是一个拥有一个age数组的对象。

二.$.ajax()方法中dataType属性的取值

$.ajax()方法中dataType属性要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText【在第三部分解释】,并作为回调函数参数传递。可用的类型如下:

xml:返回XML文档,可用JQuery处理。

html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。

script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。

json:返回JSON数据。

jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。

三.Mime数据类型及response的setContentType()方法

什么是MIME类型?在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。

例 如,架设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给 Execl来处理(假设我们设定Execl为处理特殊MIME类型的应用程序)。在Java中,设定MIME类型的方法是通过Response对象的ContentType属性。比如常用:response.setContentType("text/html;charset=UTF-8")进行设置。

最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。

每个MIME类型由两部分组成,前面是数据的大类别,例如文本text、图象image等,后面定义具体的种类。

常见的MIME类型:

超文本标记语言文本 .html,.html text/html

普通文本 .txt text/plain

RTF文本 .rtf application/rtf

GIF图形 .gif image/gif

JPEG图形 .ipeg,.jpg image/jpeg

au声音文件 .au audio/basic

MIDI音乐文件 mid,.midi audio/midi,audio/x-midi

RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio

MPEG文件 .mpg,.mpeg video/mpeg

AVI文件 .avi video/x-msvideo

GZIP文件 .gz application/x-gzip

TAR文件 .tar application/x-tar

客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。

服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。

Content-type: text/html

注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。

如前面所说,在Java中,设定MIME类型的方法是通过Response对象的ContentType属性,设置的方法是使用response.setContentType(MIME)语句,response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。

Tomcat的安装目录confweb.xml中就定义了大量MIME类型 ,可以参考。比如可以设置:

response.setContentType("text/html; charset=utf-8"); html

response.setContentType("text/plain; charset=utf-8"); 文本

application/json json数据

这个方法设置发送到客户端的响应的内容类型,此时响应还没有提交。给出的内容类型可以包括字符编码说明,例如:text/html;charset=UTF-8。如果该方法在getWriter()方法被调用之前调用,那么响应的字符编码将仅从给出的内容类型中设置。该方法如果在getWriter()方法被调用之后或者在被提交之后调用,将不会设置响应的字符编码,在使用http协议的情况中,该方法设置 Content-type实体报头。

四.使用$.ajax()方法获取json数据的三种方式

dataType参数的配置决定了jquery如何帮助我们自动解析服务器返回的数据,有几种方式可以获取后台返回的json字符串并解析为json对象,下面是Java为例解释,下面三中方式的结果都是图一所示,项目运行在内网,无法截图,只能拍照,见谅。

1、$.ajax()参数中不设置dataType,后台response也不设置返回类型,则默认会以普通文本处理【response.setContentType("text/html;charset=utf-8");也是作为文本处理】,js中需要手动使用eval()或$.parseJSON()等方法将返回的字符串转换为json对象使用。

//Java代码:后台获取单个数控定位器的历史表格的数据

public void getHistorySingleData() throws IOException{

HttpServletRequest request = ServletActionContext.getRequest();

HttpServletResponse response = ServletActionContext.getResponse();

response.setHeader("Content-type", "text/html;charset=UTF-8");

response.setContentType("text/html;charset=utf-8");

String deviceName = request.getParameter("deviceName");

String startDate= request.getParameter("startDate");

String endDate = request.getParameter("endDate");

SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);

System.out.println(singleHistoryData.length);

System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....]查到几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}

response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());

}

/*js代码:选择查询某一时间段的数据,点击查询之后进行显示*/

$("#search").click(function () {

var data1 = [];

var n;

var deviceName=$("body").attr("id");

var startDate = $("#startDate").val();

var endDate = $("#endDate").val();

$.ajax({

url:"/avvii/chart/getHistorySingleData",

type:"post",

data:{

"deviceName":deviceName,

"startDate": startDate,

"endDate": endDate

},

success: function (data) {

alert(data);//---->弹出[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....],后台传过来几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}

alert(Object.prototype.toString.call(data)); //--->弹出[object String],说明获取的是String类型的数据

var JsonObjs = eval("(" + data + ")"); //或者:var JsonObjs = $.parseJSON(data);

alert(JsonObjs);//alert(JsonObjs);---->弹出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]??后台传过来几条singleHistoryData对象就打印几个[object Object]

n=JsonObjs.length;

if(n==0){

alert("您选择的时间段无数据,请重新查询");

}

for(var i = 0; i < JsonObjs.length; i++){

var name = JsonObjs[i]['time'];//针对每一条数据:JsonObjs[i],或者:JsonObjs[i].time

var state = JsonObjs[i]['state'];

var ball = JsonObjs[i]['ball'];

var xd = JsonObjs[i]['xd'];

var yd = JsonObjs[i]['yd'];

var zd = JsonObjs[i]['zd'];

var xf = JsonObjs[i]['xf'];

var yf = JsonObjs[i]['yf'];

var zf = JsonObjs[i]['zf'];

data1[i] = {name:name,state:state,ball:ball,xd:xd,yd:yd,zd:zd,xf:xf,yf:yf,zf:zf};//个数与下面表头对应起来就可以了,至于叫什么名字并不影响控件的使用

}

if(JsonObjs.length != 10){

for(var j=0;j<(10-((JsonObjs.length)%10));j++){ //补全最后一页的空白行,使表格的长度保持不变

data1[j+JsonObjs.length] = {name:" ",state:"",ball:"",xd:"",yd:"",zd:"",xf:"",yf:"",zf:""};

}

}

var userOptions = {

"id":"kingTable", //必须 表格id

"head":["时间","运行状态","球头状态","X向位置/mm","Y向位置/mm","Z向位置/mm","X向承载力/Kg","Y向承载力/Kg","Z向承载力/Kg"], //必须 thead表头

"body":data1, //必须 tbody 后台返回的数据展示

"foot":true, // true/false 是否显示tfoot --- 默认false

"displayNum": 10, //必须 默认 10 每页显示行数

"groupDataNum":6, //可选 默认 10 组数

sort:false, // 点击表头是否排序 true/false --- 默认false

search:false, // 默认为false 没有搜索

lang:{

gopageButtonSearchText:"搜索"

}

}

var cs = new KingTable(null,userOptions);

}

});

});2、$.ajax()参数中设置dataType="json",则jquery会自动将返回的字符串转化为json对象。后台可以设置为:【推荐】response.setContentType("text/html;charset=utf-8");或者response.setContentType("application/json;charset=utf-8");

//Java代码:后台获取单个数控定位器的历史表格的数据

public void getHistorySingleData() throws IOException{

HttpServletRequest request = ServletActionContext.getRequest();

HttpServletResponse response = ServletActionContext.getResponse();

response.setHeader("Content-type", "text/html;charset=UTF-8");

response.setContentType("text/html;charset=utf-8");

String deviceName = request.getParameter("deviceName");

String startDate= request.getParameter("startDate");

String endDate = request.getParameter("endDate");

SingleHistoryData[] singleHistoryData = chartService.getHistorySingleData(deviceName,startDate, endDate);

System.out.println(singleHistoryData.length);

System.out.println(JSONArray.fromObject(singleHistoryData).toString());//打印:[{"time":"2016-11-11 10:00:00","state":"运行","ball":"锁紧",....},{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....},{},{}....]查到几条singleHistoryData对象就打印几个对象的信息{"time":"2016-11-11 10:00:05","state":"运行","ball":"锁紧",....}

response.getWriter().print(JSONArray.fromObject(singleHistoryData).toString());

}/*js代码:页面首次加载时,显示规定时间段的数据*/

var data1 = [];

var deviceName=$("body").attr("id");

var startDate = $("#startDate").val("2000-01-01 00:00:00");

var endDate = $("#endDate").val("2018-01-01 00:00:00");

$.ajax({

url:"/avvii/chart/getHistorySingleData",

type:"post",

data:{

"deviceName":deviceName,

"startDate": "2000-01-01 00:00:00",

"endDate": "2018-01-01 00:00:00"

},

dataType:"json",

success: function (data) {

alert(data);//---->弹出[object Object],[object Object],[object Object][object Object],[object Object],[object Object]??后台传过来几条singleHistoryData对象就打印几个json对象:[object Object]

for(var i = 0; i < data.length; i++){ 怎么获取AJAX前台返回JSON 数据

用 $.getJSON(),$.get(),$.post(),$.ajax()中的以上两种或两种以上方法从myhandler.aspx中获取返回值,如获取成功,弹出成功信息提示,否则弹出失败信息提示。 初学AJAX 有代码最好

车融汽车网还为您提供以下相关内容希望对您有帮助:

asp.net 返回json格式

context.Response.ContentType = "text/plain";string json = "[{'user_id':'123'}]";context.Response.Write(json);} 前台 用ajax 访问 Handler1.ashx 就可以得到json 数据了 建议 用jquery 的ajax 方法 .ajax({ ...

有关$.ajax()方法中如何从服务器获取json数据

1、$.ajax()参数中不设置dataType,后台response也不设置返回类型,则默认会以普通文本处理【response.setContentType("text/html;charset=utf-8");也是作为文本处理】,js中需要手动使用eval()或$.parseJSON()等方法将返回的字符串转换为...

asp.net页面如何接收AJAX传递过来的数组(普通数组和jason数组,两个麻烦...

在.cs文件中,用 Page.Request["参数名"]就可以得到AJAX传递过来的值。在 asp.net中,无论是普通数组还是JSON数组,都可以先转换成字符串,然后传递过去。asp.net mvc可以直接传对象.例如:在JS中://这里用的是Jquery...

ajax怎么获取返回的json数据

首先要明白ajax的基本格式,参考下面的内容,可以发现,success是请求成功后服务器返回的数据,接收只需要把回调函数的值处理就可以了,如:response:即为服务器返回的数据,例如:{"uid":123,"name":"jghdream"},如下输出...

asp页面用什么代码接收ajax传过来的json数据

除了使用Request对象别无他法,如果你是MVC项目倒是可以直接把页面参数映射到Action方法的参数上,这叫"模型绑定",但其内部实现也是Request对象,所以请你检查你的代码,是否真的传了值。

asp页面如何接收ajax传过来的json数据

stream.Close()Set stream = nothing Response.write(s)得到的s就是json格式的字符串,就象{"userid":"apple","password":"test123456"} 然后再利用其它工具可以将json字符串中的相关信息提取出来。这个网上有很多示例。

ajax序列化from表单怎么接收ajax序列化提交表单

注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。格式:varjsonData=$(form).serializeArray();1 1 在使用ajax提交表单数据时,以上两种方法都可以将data参数设置为(form).serialize()...

高手请进来jquery ajax获取asp页面的返回值

1、asp页的内容用 Response.Write 输出所需显示的内容即可。2、符合规律与格式,如果要输出json,就用字符串拼接好json的格式,再把数据插入指定位置。多条目也是用循环写好。再或者直接就是用table来拼接。3、这个asp页面无...

ajax返回JSON时的处理方式

你现在是返回"成功"?还是"失败"?如果返回成功 success(res){ //添加如下代码 var result = eval("("+res+")"); alert(result.sql);}

ajax请求时如何解析json数据

服务器需要返回json格式的数据,然后在ajax的返回类型设置为json格式,就可以在返回的数据当中直接所以json数据了。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文

Top