WEB-js no puede ingresar al problema de transmisión cuando la función pasa los datos de la matriz de objetos

Tabla de contenido

La fuente del problema:

Datos transmitidos al front-end:

Ideas para solucionar el problema

La realización concreta de la idea

para resumir

La fuente del problema:

El problema encontrado al realizar el desarrollo WEB
 necesita analizar los datos json transmitidos desde un backend, pero hay otro objeto en esta matriz json en forma de matriz de objetos, cuando pasa esta matriz de objetos a la función js, se produce un error.

Datos transmitidos al front-end:


[{"lat": "30.162964", "lng": "120.272827", "nombre": "萧山 区 仓库", "dirección": "临 浦镇", "cosas": "块石: 123.0 立方米" , "ckthings": "块石: 45067 立方米", "CWList": [{"cknum": "0", "clnum": "21", "CLlat": "30.070388807312316", "CLlng": "120.98680132382566 "}, {" cknum ":" 0 "," clnum ":" 44 "," CLlat ":" 29.665853864273636 "," CLlng ":" 120.47346601010386 "}, {" cknum ":" 0 "," clnum ": "41", "CLlat": "30.35209906273789", "CLlng": "121.06390570670683"}, {"cknum": "0", "clnum": "18", "CLlat ":" 30.18406913403903 "," CLlng ":" 120.19047972769886 "}]}, {"lng": "0000"}, {"lat": "30.40418", "lng": "120.551627", "name": "Jiaxing Management Office Warehouse", "address": "Haining Yanguan Guanchao No. 1 Linjiang Road, Scenic Spot "," things ":" Tubería de acero (material): 56.0 toneladas "," ckthings ":" Tubería de acero (material): 62.636 toneladas "," CWList ": [{" cknum ":" 1 " , "clnum": "44", "CLlat": "29.665853864273636", "CLlng": "120.47346601010386"}, {"cknum": "1", "clnum": "18", "CLlat": "30.18406913403903" , "CLlng": "120.19047972769886"}]}, {"lat": "30.162964", "lng": "120.272827", "name": "Xiaoshan District Warehouse", "address": "Linpu Town", "things ":" Casco: 58.0 en la parte superior ","ckthings ":" 安全帽: 100 顶 "," CWList ": [{" cknum ":" 2 "," clnum ":" 21 "," CLlat ":" 30.070388807312316 "," CLlng ":" 120.98680132382566 "}, {"cknum": "2", "clnum": "41", "CLlat": "30.35209906273789", "CLlng": "121.06390570670683"}] }]

Los datos marcados en rojo son los datos que necesitamos procesar.

Cuando transferimos esta matriz de objetos CWList a la función personalizada js en la página web, se producirá un error

Por ejemplo, pase la CWList anterior a la función thelocation () a continuación, y se producirá un error cuando se llame a la función

function thelocation(CWList){

    、、、、、、
    、、、、、、

}

 El problema que apareció de inmediato fue así:

Error de sintaxis no detectado: token no válido o inesperado

La razón para analizar un paquete es: contiene cadenas de caracteres chinos o símbolos chinos

 Luego lo pensé, ¿es posible agregar comillas dobles directamente a la capa exterior?

Así que agregué una comilla doble a los datos de CWList (var list = "'" + CWList [1] + "'";) y lo intenté, pero el resultado es obviamente un fracaso. Entonces es un loco problema de Baidu, pero todo es inútil.

Finalmente, pensé si había símbolos especiales en él que causaban que se bloqueara cuando se pasaba. Así que busqué caracteres de escape y así sucesivamente. Efectivamente, hay varios caracteres especiales en mis datos, que se convierten a Tipo de cadena. No es posible ingresar la función, y luego podemos lograr nuestro objetivo tratando con estos caracteres especiales.

Ideas para solucionar el problema

Luego busqué un método de transcodificación para encontrar una manera de resolver el problema que encontré (usando la codificación URI para la transmisión). Primero, codificamos los datos con URI con cadenas especiales que necesitamos transmitir (es decir, el tipo de cadena Los datos pueden ser URI codificado, convertido a formato URI) y luego transmitido, y finalmente decodificado en la función de transmisión. Resolvió con éxito el problema que encontramos.

La realización concreta de la idea

El análisis anterior no es más que una operación de codificación y decodificación de los datos de caracteres en CWList, luego se vuelve muy simple

Codifique los datos en formato URI antes de la transmisión:

var valueStr = JSON.stringify(CWList);  //对象转字符串
valueStr=encodeURIComponent(valueStr);    //使用uri来传递对象数组的值

Aquí es un paso primero para convertir la matriz JSON en una cadena, y luego utilizar nuestro método de codificación URI para lograr el propósito, principalmente usando el encodeURIComponent (); método

Decodifica los datos en nuestro formato original después de la transmisión:

var Str = decodeURIComponent(CWList);//使用URI编码来传递数组的值

Este paso usa decodeURIComponent (); este método se usa para decodificar los datos transmitidos

para resumir

Al transmitir una matriz de objetos (datos que contienen ciertos caracteres especiales), se producirá un error si se transmite directamente con el tipo de cadena, y debemos procesarlo en un formato de codificación especial (usamos la codificación URI)

Sin dolores Sin resultados

 

Supongo que te gusta

Origin blog.csdn.net/weixin_45629315/article/details/109270392
Recomendado
Clasificación