Javascript 处理服务器响应AJAX

Javascript 处理服务器响应AJAX,javascript,jquery,ajax,Javascript,Jquery,Ajax,在处理一个简单项目的过程中(至少我认为是简单的),用户点击一个按钮,上面的文本框中会出现一个由php生成的随机语句。我没有访问php文件的权限,所以我看不到代码,感觉有点失落。我认为,我遇到的问题是,我处理来自服务器的响应的方式(handleServerResponse函数)中存在错误。如有任何建议,将不胜感激 在尝试调试时,我看到以下消息:(我更改了url) XMLHttpRequest无法加载http:somephp.php。不 “Access Control Allow Origin”标头

在处理一个简单项目的过程中(至少我认为是简单的),用户点击一个按钮,上面的文本框中会出现一个由php生成的随机语句。我没有访问php文件的权限,所以我看不到代码,感觉有点失落。我认为,我遇到的问题是,我处理来自服务器的响应的方式(handleServerResponse函数)中存在错误。如有任何建议,将不胜感激

在尝试调试时,我看到以下消息:(我更改了url)

XMLHttpRequest无法加载http:somephp.php。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许访问源“null”

迄今为止,守则:

var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject(){
var xmlHttp;

if(window.ActiveXObject){
    try{
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
       xmlHttp = false;
       }
    }else{
    try{
       xmlHttp = new XMLHttpRequest();
    }catch(e){
       xmlHttp = false;
    }
  }

if(!xmlHttp)
    alert("Error 1");
  else
    return xmlHttp;
}


$("#BtnReset").click(function () {
    $("#TBSaying").val("");
})

$("#BtnGetSaying").click(function () {
    process();
})


function process(){
    if(xmlHttp.readyState==0 || xmlHttp.readyState==4){
    xmlHttp.open("GET", "http://somephp.php", true);
    xmlHttp.onreadystatechange = handleServerResponse;
    xmlHttp.send(null);
    }else{
       setTimeout('process()', 1000);
    }
}

function handleServerResponse(){
    if(xmlHttp.readyState==4){
       if(xmlHttp.status==200){
        xmlResponse = xmlHttp.responseXML;
        xmlDocumentElement = xmlResponse.documentElement;
        message = xmlDocumentElement.firstChild.data
        $("#TBSaying").val(message);
       }else{
         alert('error 2');
         }
    }
}
通读JQuery文档并重新开始,将其上载到php所在的服务器上并运行。这里是最后的代码:感谢所有建议

$("#BtnReset").click(function () {
    $("#TBSaying").val("");
})

$("#BtnGetSaying").click(function () {
    process();
})


function process(){
            // AJAX Code To Submit Form.
            $.get("http://somephp.php",function(data){
             $("#TBSaying").val(data);
  });
 }

来自浏览器的Ajax调用受到所谓的“同源限制”的限制。基本上这意味着,默认情况下,您只能对网页来自的同一服务器进行Ajax调用。这意味着您不能对另一个域、端口或协议上的服务器进行常规Ajax调用

您可以阅读有关同一原产地的政策

有三种方法可以绕过此限制,但都需要服务器的合作

  • CORS。您从中发出请求的服务器在其响应中放入标题,告诉浏览器是否允许跨源请求,甚至允许来自哪个域。这使浏览器有权完成来自不同来源的Ajax调用

  • JSONP.您可以阅读更多关于。基本上,您需要从目标服务器请求一个脚本,并且该脚本的编码方式可以为您提供所需的答案(通常是JSON数据格式)

  • 服务器代理。您可以找到或编写一个服务器代理,该代理将为您从另一台服务器请求数据。由于服务器到服务器的通信不受同一来源限制,因此有时您可以找到另一台允许跨来源请求的服务器,该服务器将为您获取数据,然后将数据返回给您


  • 你的javascript看起来很糟糕,但唉,错了 “访问控制允许源代码”是一个服务器端(php?)错误,对不起

    告诉服务器人员添加如下内容

    header("Access-Control-Allow-Origin: *"); 
    
    查看您的javascript是否正确^^

    顺便说一下

  • 警报(“错误1”);可能应该使用console.log或抛出新错误()
  • 为什么xmlHttp作为一个全局文件,可以只使用进程(e){var xhr=e.target;..}
  • 不要执行此设置超时('process()',1000),不设置超时(进程,1000)
    请详细描述您需要帮助的内容。您到底观察到了什么(例如,运行此代码时会发生什么)?你到底希望发生什么?您是否在调试日志中看到任何错误?您是否在服务器响应函数中放置了
    console.log()
    语句,以便准确地查看返回的数据?基本调试步骤应该在您发布之前完成,这样您就可以描述您已经采取了哪些步骤以及您到底在哪里遇到了问题。您的问题,就目前而言,我们无法回答(信息不足)。需要你提供更多的信息。如果没有这些额外的信息,这个问题就需要解决了。作为一种更安全的替代方案,如何避免由于源限制而无法向服务器发出简单的ajax请求?实际上,它被称为“同源策略”-不仅是域,还包括协议,端口和主机必须相同。感谢您的回复。因此,只要所有的js代码都正确,如果我将这个项目(html和js)上传到php所在的同一台服务器上,那么它应该可以工作?@exeleon-如果您的php文件与您尝试从中执行ajax调用的主机网页位于同一台服务器上,那么您将通过同源策略,因为您将联系同一个源。我不知道你是否会遇到其他问题。谢谢你的建议!我选择这一点作为正确答案,因为你的评论“你的javascript看起来很糟糕”,让我回到过去,用更正确、更干净(尽管可能不是完美)的方式来做。我已经更新了上面我原来的帖子。再次感谢。