jQuery AJAX调用不起作用,并且始终进入错误功能

时间:2018-08-01 13:03:27

标签: php jquery html ajax

我正在创建一个重置密码页面,当我尝试通过ajax调用将数据提交到后端时,它总是返回到错误功能。当我尝试打印错误时,它没有显示任何错误。

$.ajax({
 url: "php file url",
    method: "GET",
     data: {
     "action":1,
      "email":email
       },
       success:function(data){
        },
       error:function(){
        close_loader();
        show_snack("Problem!!! Try again later...");
      }
});

它永远不会到达成功功能...我得到了-

  

跨源请求被阻止:同源策略禁止阅读   网址中的远程资源。 (原因:CORS标头   缺少“ Access-Control-Allow-Origin”。

3 个答案:

答案 0 :(得分:0)

这个问题被问了好几次,但是没有人以更好的方式解释它。所以,让我告诉您问题所在,然后解决这些问题。

  • 当您使用ajax调用与另一台服务器通信时,您基本上会创建一个HTTP请求,就像在URL中点击地址一样。
  • 如今,rest API已在头脑中创建,因此只有经过身份验证的用户才能使用该rest API。现在,通过身份验证的人以及您如何知道的。
  • 在服务器初始阶段设置服务器时,他们将使用一些自定义域或必要的标头使用身份验证机制。 (自定义域::只有特定的域才能访问其余的API。**自定义标头:**它们在标头中使用某种类型的属性,并在运行时验证请求是否发送该标头)例如,您有一台服务器,您正在其中检查请求是否在标头中包含该属性(例如,它可以是任何属性,例如:请求标头的内容类型必须为application / json)。

现在,回到您的问题。 当您使用ajax调用时,浏览器首先通过先触发OPTION请求调用来检查该请求是否被服务器接受。如果响应为200,则浏览器再次发送您的原始请求以及所有数据,否则它将失败并发送 CORS 问题。

解决方案 您可以在服务器端通过验证所有Header属性来解决它。 (推荐方法) 您也可以使用代理服务器对其进行自定义。现在,什么是代理? 这种黑客方法是将原始请求发送到代理服务器,然后代理服务器负责调用您的实际请求并取回响应。因此,您如何设置代理服务器,以及他如何了解代理服务器并由其授权。这是实际的尝试和命中方法,他在Header中添加了一些虚拟属性并尝试请求它。如果通过了,那么您就很好,否则就会失败。 (例如:在谷歌浏览器中使用CORS扩展名)

答案 1 :(得分:0)

错误正好说明了您的问题, 没有返回正确的跨域标头。

“跨域请求被阻止:同源策略禁止读取URL上的远程资源。(原因:缺少CORS标头'Access-Control-Allow-Origin')。”

当源头没有标题时,您的浏览器会假定对域的所有请求都应从外部域中阻止:

  1. 从domain.com中的javascript文件到otherdomain.com的请求将被阻止

  2. 从domain.com到www.domain.com的文件的请求也将被阻止-> CORS将它们视为不同的域。

  3. 默认情况下,
  4. 从domain.com到domain.com的请求是允许的

要解决此问题,请在您的PHP文件中编写以下代码:

$scriptdomain = "domain-where-the-script-is.something";
header("Access-Control-Allow-Origin: $scriptdomain");

答案 2 :(得分:0)

您可以下载适用于Chrome的此工具: https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

基本上,这种情况发生在本地主机环境中,不应在真正的服务器中发生,然后您可以激活它(绿色)以允许您执行跨域请求而不会出现问题