繁体   English   中英

当前针对Ajax请求的最佳实践

[英]Current best practices for Ajax request

我在一边编写代码,然后拔出了我与朋友建立的一些旧网站,以重新开始工作。 我已经有一段时间没有做任何AJAX了,当我试图找出我的代码失败的地方时,我发现没有太多资源在显示。 我猜这是因为我使用的是旧方法。 我试图查看我应该考虑的方法是否有快速变化,或者是否有人知道一种解决问题的方法。 这些网页使用jQuery 1.4.4,所以已经很老了。

这是我的旧代码:

var ajaxRequest = getAjaxRequest();
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4) {
        document.getElementById("apple").style.display = "block";
        setTimeout(function(){ document.getElementById("apple").style.display = "none"; },2000);
    }
}
ajaxRequest.open("GET", "url.php" + encodeURIComponent(appleObject), true);
ajaxRequest.send(null);

我看到很多代码更像:

$.ajax({
    type: "GET",
    url: "url.php",
    success: function(something){
        something
    }
});

我的目标是使用“成功”或“ onSuccess”来确保找到该页面,并在可能的情况下console.log从php文件返回的内容。

问题:-我的方法是安全问题,需要进行重大更新吗? -如果是这样,我是否也需要硬着头皮更新jQuery? -如果没有,有人可以建议如何使用现有代码进行某种形式的“成功”调用吗? 即类似: ajaxRequest.success(console.log(something));

您的旧代码没有使用JQuery进行AJAX调用,因此无论有1.4版本,它都不适合AJAX。

您的问题实际上归结为是否使用JQuery完成此任务。 JQuery只是一个JavaScript库,它使许多任务更易于编写。 没有JQuery,绝对不可能没有它,因为JQuery JavaScript。 如果要使用JQuery,则在幕后,JQuery只会做原始代码已经做的事情。

您的原始代码已经有一个“成功”部分,只是没有特别标记。 但是,它确实没有对request.status === 200进行第二次测试,以知道来自请求的响应是一个很好的响应(200是OK的HTTP状态代码)。

因此,原始代码确实应该是这样的:

var ajaxRequest = getAjaxRequest();
ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4) {
      // Response received...
      if(ajaxRequest.status === 200){
        // Request was successful - returned data (if any)
        // is available via the xhr.responseText property
        document.getElementById("apple").style.display = "block";
        setTimeout(function(){ 
         document.getElementById("apple").style.display = "none"; 
        },2000);
      }
    }
}
ajaxRequest.open("GET", "url.php" + encodeURIComponent(appleObject), true);
ajaxRequest.send(null);

但是,您可以在此处使语法现代化一些,使其更直观:

var ajaxRequest = getAjaxRequest();
ajaxRequest.addEventListener("load", function(data){
  // Request was successful - returned data (if any)
  // is available via the xhr.responseText property
  document.getElementById("apple").style.display = "block";
    setTimeout(function(){ 
      document.getElementById("apple").style.display = "none"; 
    },2000);
});

ajaxRequest.addEventListener("error", function(evt){
  // Request was unsuccessful
  console.log("ERROR", evt)
});

ajaxRequest.open("GET", "url.php" + encodeURIComponent(appleObject), true);
ajaxRequest.send(null);

您可以在此处阅读有关制作XMLHttpRequests的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM