获取URL中的表单参数及相关分析和思路

本文探讨了四种版本的JavaScript代码,如何逐步改进从URL查询参数中提取关键信息(如status、lpn、start和end)的效率和兼容性,最终推荐使用URLSearchParams对象进行处理,并介绍了其在处理URL参数方面的优势。
摘要由CSDN通过智能技术生成
let url = (decodeURI(window.location.search)).toString()
let statusIndex = url.indexOf("status")
let lpnIndex = url.indexOf("lpn")
let startIndex = url.indexOf("start")
let endIndex = url.indexOf("end")

let status = url.substring(statusIndex+7,lpnIndex-1)
let lpn = url.substring(lpnIndex+4,lpnIndex+11)
let startStr = url.substring(startIndex+6,startIndex+16)
let endStr = url.substring(endIndex+4,endIndex+14)
let start = new Date(Number(startStr)*1000)
let end = new Date(Number(endStr)*1000)

然后就是setInputData

本方法直接获取search然后截取对应字符串,但兼容性不好,表单全填才不会出BUG

第一版解决方案,需要更改。。。

第二版

let search = (decodeURI(window.location.search))
search = search.substring(1,search.length)
let params : Record<PropertyKey, string> = {}
let items = search.split("&")
let len = items.length
let name = null
let value =null

if(len>0){
    for(let i=0;i<len;i++){
        let item=items[i].split("=")
        name = item[0]
        value = item[1]
        console.log(typeof name,name,)
        console.log(typeof value,value)
        params[ name ] = value
    }

}

console.log('search =>',search)
console.log('params =>', params)

第二版可以用,但准备用自带的URL方法分析search

第三版

let url = new URL(window.location.href)
let params : Record<PropertyKey, string> = {}

url.searchParams.forEach((v,k)=>{
    params [k] = v
})



if(params.lpn || params.status || params.start || params.end){
    let start = null
    let end = null

    if(params.start){
        start = new Date(Number(params.start)*1000)
    }

    if(params.end){
        end = new Date(Number(params.end)*1000)
    }

    setInputData({
        ...inputData,
        lpn:params.lpn,
        status:params.status,
        start:start,
        end:end
    })
}

有兼容性问题但问题不大 

图片来源:js的URL对象兼容性实测O - linsk1998的个人空间 - OSCHINA - 中文开源技术交流社区

 第四版,大佬更改版

let url = new URL(window.location.href)
let params : Record<PropertyKey, string| Date> = {}

url.searchParams.forEach((v,k)=>{
    params [k] = v
})
if(params['start']) {
    params['start'] = new Date(Number(params.start)*1000);
}
if (params['end']) {
    params['end'] = new Date(Number(params.end)*1000);
}
        
if (Object.keys(params).length) {
    setInputData(values => {
        return {
            ...values,
            ...params
        };
    })
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里提供一个简单的实现思路: 1. 在前端页面获取表单的用户名输入框,以及一个用于显示判断结果的文本框。 2. 给用户名输入框绑定一个失去焦点事件,当失去焦点时触发一个函数。 3. 在该函数获取用户名输入框的值。 4. 使用AJAX向后端发送一个GET请求,请求一个判断用户名是否存在的接口,同时将用户名作为请求参数传递给后端。 5. 后端接收到请求后,查询数据是否存在该用户名,如果存在则返回一个"true"字符串,否则返回一个"false"字符串。 6. 前端接收到后端返回的结果后,将结果显示在文本框即可。 下面是一个简单的示例代码: 前端部分: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>判断用户名是否存在</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> </head> <body> <input type="text" id="username" placeholder="请输入用户名"> <span id="result"></span> <script> $(function() { $('#username').blur(function() { var username = $(this).val(); $.ajax({ url: '/check_username', type: 'get', data: {username: username}, success: function(res) { if (res == 'true') { $('#result').text('该用户名已存在'); } else { $('#result').text('该用户名可用'); } } }); }); }); </script> </body> </html> ``` 后端部分(使用Python Flask框架): ```python from flask import Flask, request app = Flask(__name__) # 模拟数据库,用一个列表来存储已存在的用户名 existing_users = ['user1', 'user2', 'user3'] @app.route('/check_username') def check_username(): username = request.args.get('username') if username in existing_users: return 'true' else: return 'false' if __name__ == '__main__': app.run() ``` 需要注意的是,这只是一个简单的示例代码,实际应用需要根据具体情况进行修改和优化。另外,为了安全起见,建议在后端也进行一定的验证和过滤,比如判断用户名是否符合规范,避免SQL注入等安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值