Ajax调用失败

时间:2016-12-15 02:14:53

标签: javascript php json ajax

我正在使用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);
}
}

1 个答案:

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