原理:php利用读取文件函数 (马上会补充),将test.txt文件中 格式为json的数据读取出,并使用json编码函数json_encode(),将字符串编码后传递给js。js利用ajax接收数据data,data不加处理时typeof()打印出来的数据类型是string,即字符串。如果我们想要获取到这个字符串特定的值(因为它其实是以json的形式出现),需要将json字符串转换为json对象,这样js就可以获取到特定的值。一开始,我使用js中的eval()和JSON.parse()函数转换时,json字符串打印出来的结果是boolean型(只能输出false,和true),后来发现是php传过来的值不是json形式的,是php的文件读取函数的选择有关,下面将展示。
其中php的文件读取函数:
1,readfile(‘test.txt')会读取文件中的内容和文件中内容的位数!最初使用的是它,结果js正常接收字符串,但是一旦使用JSON.parse(函数,即json字符串转json对象就会报错,后来打印出来才发现,json字符串后面总是跟着一个数字,这个数字就是这个字符串的长度!气死了,怪不得无法转换成json,对象,因为后面跟一个数字就不是json格式了。
2,使用fread()
$handle=fopen('get.txt',"r");
$a=fread($read,1000);
很遗憾,这种读取文件的方式会返回字符串,但是会将使用转义符将“”’‘转义。
3,使用fgets()循环输出每个字符:
$handle=fopen('get.txt',"r");
while(!feof($handle)){
echo fgets($handle, 1024);
}
fclose($handle);
这次就非常好,正常输出文件内容,其中的1024是限制读取文件的字符数;
其中的js将string类型的json转换为对象:
就非常简单:
var data=JSON.parse(data);
h.innerHTML=data.mag[0].value;
-------------------------------
下面 是全部的代码:
php中是:
$handle=fopen('get.txt',"r");
while(!feof($handle)){
echo fgets($handle, 1024);
}
fclose($handle); //因为这样实际上是将字符一个个发送过去,所以不需要json_encode()转换
js中是:
$(function(){
var h1=document.getElementById("h1");
$.ajax({
'url':'hi.php',
//'dataType':'json',
'success':function(data){
alert(1);
console.log(typeof(data));
var data2=JSON.parse(data);
console.log(typeof(data2));
h1.innerHTML=data2.msg[0].value;
}
})
})