Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax调用失败_Javascript_Php_Json_Ajax - Fatal编程技术网

Javascript Ajax调用失败

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); }

我使用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 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 your
bestreads.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