Javascript Ajax调用失败
我使用Ajax向服务器发送信息并返回JSON字符串。这是我正在使用的代码:Javascript Ajax调用失败,javascript,php,json,ajax,Javascript,Php,Json,Ajax,我使用Ajax向服务器发送信息并返回JSON字符串。这是我正在使用的代码: function getRequests(folder, mode) { xhr = new XMLHttpRequest(); xhr.onreadystatechange = singleBook(folder, mode); xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true); xhr.send(null); }
function getRequests(folder, mode) {
xhr = new XMLHttpRequest();
xhr.onreadystatechange = singleBook(folder, mode);
xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true);
xhr.send(null);
}
function singleBook(folder, mode) {
alert(xhr.responseText);
if (mode == "info") {
var json = JSON.parse(xhr.responseText);
}
}
我已经测试了我的PHP脚本,并且我100%确定它正确地为每个可能的文件夹名称打印出正确的JSON字符串。我已经验证了它创建的JSON字符串以确认这一点。
但是,这段代码使xhr完全为空。我尝试用xhr.stats检查状态,但它返回0,这对我来说没有意义,因为我认为它应该返回404或200
这是一个学校项目,我不允许使用JQuery,所以我需要一个不使用JQuery的解决方案。在我之前的调用中,我以同样的方式进行了Ajax调用,它可以正常工作,但返回的是XML字符串而不是JSON,这让我觉得需要做些其他事情来返回JSON字符串,但我不知道这可能是什么
PHP代码:
function createJson($folder) {
$path = "books/" . $folder . "/info.txt";
$infoFile = file($path);
$info = '{"title":"' . $infoFile[0] . '","author":"' . $infoFile[1] . '","stars":"' . $infoFile[2] . '"}';
print $info;
}
您需要将函数引用分配给
onreadystatechange
,而不是调用singleBook
函数,并将该函数返回的值分配给onreadystatechange
在处理ajax请求之前,还需要等待它
函数getRequests(文件夹,模式){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=singleBook(xhr,文件夹,模式);
xhr.open(“GET”、“bestreads.php?mode=“+mode+”&title=“+folder,true”);
xhr.send(空);
}
函数单册(xhr、文件夹、模式){
返回函数(){
if(xhr.readyState==XMLHttpRequest.DONE&&xhr.status==200){
console.log(xhr.responseText);
如果(模式==“信息”){
var json=json.parse(xhr.responseText);
}
}
}
}您需要将函数引用分配给
onreadystatechange
而不是调用singleBook
函数,并将该函数返回的值分配给onreadystatechange
在处理ajax请求之前,还需要等待它
函数getRequests(文件夹,模式){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=singleBook(xhr,文件夹,模式);
xhr.open(“GET”、“bestreads.php?mode=“+mode+”&title=“+folder,true”);
xhr.send(空);
}
函数单册(xhr、文件夹、模式){
返回函数(){
if(xhr.readyState==XMLHttpRequest.DONE&&xhr.status==200){
console.log(xhr.responseText);
如果(模式==“信息”){
var json=json.parse(xhr.responseText);
}
}
}
}show your
bestreads.php
code.show yourbestreads.php
code。这会返回json字符串,但出于某种原因,它也会返回我在php代码开头之外的注释。你知道为什么吗?在现代浏览器中,使用xhr。addEventListener('load',singleBook)
更美观,可读性更强。@TheBandit如果该注释不在PHP代码中,则为纯文本。纯文本==输出。返回任何输出。这肯定是我想要的,但由于某些原因,json字符串在我没有指定新行的区域中有新行(它在结束引号和逗号之前生成新行)。有没有办法防止这种情况发生?@TheBandit需要在php端修复,您如何在PHPT中创建json这是返回json字符串,但出于某种原因,它还返回我在php代码开头之外的注释。你知道为什么吗?在现代浏览器中,使用xhr。addEventListener('load',singleBook)
更美观,可读性更强。@TheBandit如果该注释不在PHP代码中,则为纯文本。纯文本==输出。返回任何输出。这肯定是我想要的,但由于某些原因,json字符串在我没有指定新行的区域中有新行(它在结束引号和逗号之前生成新行)。有没有办法防止这种情况发生?@TheBandit需要在php端修复,您如何在php中创建json