我正在使用Ajax将信息发送到服务器并返回JSON字符串。这是我正在使用的代码:
Intent intent = null;
try {
getPackageManager().getPackageInfo("com.facebook.katana", 0);
String url = "https://www.facebook.com/"+idFacebook;
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://facewebmodal/f?href="+url));
} catch (Exception e) {
// no Facebook app, revert to browser
String url = "https://facebook.com/"+idFacebook;
intent = new Intent(Intent.ACTION_VIEW);
intent .setData(Uri.parse(url));
}
this.startActivity(intent);
我已经测试了我的PHP脚本,我100%确定它为每个可能的文件夹名称正确打印出正确的JSON字符串。我已经验证了它创建的JSON字符串以确认这一点。 但是,此代码使xhr完全为空。我已经尝试用xhr.stats检查状态,但它返回0,这对我没有意义,因为我认为它应该返回404或200.
这是一个学校项目,我不允许使用JQuery,所以我需要一个不使用它的解决方案。我在调用之前以相同的方式进行Ajax调用,它没有任何问题,但是返回一个XML字符串而不是JSON,这让我觉得我需要做一些其他事情来返回JSON字符串,但我不知道那是什么也许。
PHP代码:
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);
}
}
答案 0 :(得分:2)
您需要为onreadystatechange
分配一个函数引用,而不是调用singleBook
函数,并将其返回的值赋给onreadystatechange
。
还需要在处理之前等待ajax请求
function getRequests(folder, mode) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = singleBook(xhr, folder, mode);
xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true);
xhr.send(null);
}
function singleBook(xhr, folder, mode) {
return function() {
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText);
if (mode == "info") {
var json = JSON.parse(xhr.responseText);
}
}
}
}