我在js文件中用逗号分割值时遇到问题。在我的index.php文件中,我从数据库获取名称并使用json_encode()返回这样的数据,
<?php
$sql = "select id,name from my_table where id='$id'";
$query = mysql_db_query($dbname,$sql);
while($row = mysql_fetch_array($query)){
$id = $row['id'];
$name = $row['name'];
$arr['id'][] = $id;
$arr['name'][] = '"'$ans.'"';
}
echo json_encode($arr);
?>
在我的js文件中,我使用JSON.parse获取此值。这是我的js文件。
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var arr = JSON.parse(xmlhttp.responseText);
extract(arr);
var name_var = name.toString().split(',');
alert(name_var);
}
};
}
xmlhttp.open("GET","http://myurl/index.php?t="+Math.random(),true);
xmlhttp.setRequestHeader( "Pragma", "no-cache" );
xmlhttp.setRequestHeader( "Cache-Control", "no-cache" );
xmlhttp.send();
function extract(variable) {
for (var key in variable) {
window[key] = variable[key];
}
}
如果响应数据没有像这样的逗号
,这个js就可以了"name one","name two","name three","name four"
但是如果响应数据有逗号("name one","name two,five","name three,six","name four"
),我就会遇到问题,它会分成
"name one"
,"name two
,five"
,"name three
,six"
,"name four"
对我来说问题。我想把它改成这样的
"name one"
,"name two,five"
,"name three,six"
,"name four"
我还想从所有字符串中删除双引号。
我已经花了很多时间来解决这个问题。但是没有用。我非常感谢您的帮助。
答案 0 :(得分:2)
您可以添加方括号并使用JSON解析器来执行此操作:
var s = '"name one", "name two , five" , "name three , six" , "name four"';
var arr = JSON.parse('[' + s + ']');
console.log(arr[0]); // name one
console.log(arr[2]); // name three , six
答案 1 :(得分:2)
以正确格式获取响应的正确方法是从服务器以相同格式发送响应。
尝试将$arr['name'][] = '"'$ans.'"';
更改为$arr['name'][] = $ans;
,以便将所有字符串添加到数组中而不添加额外的引号,并在客户端获取响应时使用JSON.parse(response)
来获取JSON对象来自字符串表示。
如果无法更改响应格式(第三方API或任何其他原因),则可以使用JavaScript字符串方法。
您可以使用String#substring
删除多余的引号,String#split
可以使用逗号分隔字符串,而不是在引号内。
str.substring(1, str.length - 1)
:从字符串中删除第一个和最后一个字符,从而删除第一个和最后一个引号.split(/"\s*,\s*"/)
:按"
分隔字符串,后跟任意数量的空格,然后是,
,然后是任意数量的空格,然后引用。按","
分隔"
和,
之间的任意数量的空格。
var str = '"name one" , "name two,five", "name three,six" , "name four"';
var arr = str.substring(1, str.length - 1).split(/"\s*,\s*"/);
console.log(arr);
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');;