Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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_Ajax_Xmlhttprequest - Fatal编程技术网

使用JavaScript的AJAX调用

使用JavaScript的AJAX调用,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我正在尝试学习如何使用普通JavaScript进行AJAX调用,以摆脱JQuery,转而使用我正在进行的一个小项目,但似乎没有通过xmlhttp.onreadystatechange。有人能指出我做错了什么吗?函数getDVDsAndBluRays在DOMContentLoaded上被调用了?谢谢 应该是这样的,请注意open和send函数的位置: function getDVDsAndBluRays() { console.log("Getting logged"); var xml

我正在尝试学习如何使用普通JavaScript进行AJAX调用,以摆脱JQuery,转而使用我正在进行的一个小项目,但似乎没有通过xmlhttp.onreadystatechange。有人能指出我做错了什么吗?函数getDVDsAndBluRays在DOMContentLoaded上被调用了?谢谢


应该是这样的,请注意open和send函数的位置:

function getDVDsAndBluRays() {

  console.log("Getting logged");
  var xmlhttp = new XMLHttpRequest();
  var url = 'http://www.omdbapi.com/?t=metropolis&y=&plot=short&r=json';
  xmlhttp.open('GET', url, true);
  xmlhttp.send();

  xmlhttp.onreadystatechange = function() {
    console.log("Not getting logged");
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      console.log('responseText:' + xmlhttp.responseText);
      var myMovies = JSON.parse(xmlhttp.responseText);
      myFunction(myMovies);

    }

  };
}    

function myFunction(myMovies) {
  for (var i = 0; i < myMovies.length; i++) {
    var title = myMovies[i].Title.toLowerCase().split(' ').join('+');
    var year = myMovies[i].Year;
    console.log(title + ", " + "year");
  }
}

onreadystatechange在调用后执行,当服务答复时,您实际上正在调用该服务

您在onreadystatechange处理程序中有.open和.send。把这些放在onreadystatechange函数之外,你就可以开始了

Onreadystatechange是xmlhttp请求中状态发生更改时的事件处理程序,在打开请求并发送之前不会被调用

希望这有帮助

您已将要打开和发送的调用放在onreadystatechange事件处理程序中,因此永远不会调用它们


把它们移到外面。

明白了。非常感谢。是的!非常感谢您的解释,谢谢!行。
function getDVDsAndBluRays() {

  console.log("Getting logged");
  var xmlhttp = new XMLHttpRequest();
  var url = 'http://www.omdbapi.com/?t=metropolis&y=&plot=short&r=json';
  xmlhttp.open('GET', url, true);
  xmlhttp.send();

  xmlhttp.onreadystatechange = function() {
    console.log("Not getting logged");
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      console.log('responseText:' + xmlhttp.responseText);
      var myMovies = JSON.parse(xmlhttp.responseText);
      myFunction(myMovies);

    }

  };
}    

function myFunction(myMovies) {
  for (var i = 0; i < myMovies.length; i++) {
    var title = myMovies[i].Title.toLowerCase().split(' ').join('+');
    var year = myMovies[i].Year;
    console.log(title + ", " + "year");
  }
}