php - ajax自定义 header 提交两次

标签 php jquery ajax curl cors

我正在对我构建的自定义 api 进行 api 调用。通过curl 进行的调用工作正常。但它与 Ajax 存在问题。我了解 cors,并且我相信这可能是与 cors 相关的问题。

基本上,我有一个简单的 ajax 调用,该调用调用脚本并且必须发送自定义 header 。当我发送自定义 header 时,它会发送两次请求。至少它在存储 api 请求的服务器端显示它。每次我在下面调用这个 ajax 时,它都会显示我发出了两个请求。我不明白为什么要这样做。

当我删除自定义 header 时,它只发送一次。

$( document ).ready(function() {
$.ajax({
                 url: 'https://www.website.com/test.php',
                type: 'GET',   
                beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("access_token", '1111'); },
                datatype: 'application/json',

                success: function(data, textStatus, jqXHR) {
                    alert('yes');

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert('no');
                        console.log( errorThrown );
                }


            }); 
}); 

在 PHP 方面,我指定了常见的内容。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: access_token");
header("Cache-Control: no-cache, must-revalidate"); 

有人有什么想法吗?

更新: 我在下面附加了两个序列化数组,它们都根据同一请求在同一时间发布到数据库。一种不带自定义 header ,一种带自定义 header 。我不明白这是怎么发生的,预检不应该向数据库发布任何内容。我对此 API 的接近副本进行了类似的调用,并且它没有发布两个请求。

不带标题的调用 a:11:{s:4:"主机";s:14:"www.websitehere.com";s:10:"连接";s:10:"保持事件状态";s:13:"缓存-控制";s:9:"max-age=0";s:29:"访问控制请求方法";s:3:"GET";s:6:"起源";s:20:"http://websitehere.com ";s:10:"用户代理";s:104:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/41.0.2272.76 Safari/537.36";s: 30:"访问控制请求 header ";s:20:"接受,access_token";s:6:"接受";s:3:"/";s:7:"Referer";s:34:"http://websitehere.com/test_ajax.php ";s:15:"接受编码";s:19:"gzip、deflate、sdch";s:15:"接受语言";s:14:"en-US,en;q=0.8";}

使用自定义 header 进行调用 a:9:{s:4:"主机";s:14:"www.websitehere.com";s:10:"连接";s:10:"保持事件状态";s:6:"接受";s:3:"/";s:6:"起源";s:20:"http://websitehere.com ";s:12:"access_token";s:64:"qUTWcy3qO0Cxc4ffkuU27mmvqyDpLNz4ecB0KTu5PLUllKFb1VhaCbgarfqlDAag"; s:10:"用户代理";s:104:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36(KHTML,如 Gecko)Chrome/41.0.2272.76 Safari/537.36";s:7:"Referer";s:34:"http://websitehere.com/test_ajax.php ";s:15:"接受编码";s:19:"gzip、deflate、sdch";s:15:"接受语言";s:14:"en-美国,en;q=0.8";}

当然,我确实更改了一些值。

最佳答案

我不知道为什么我最终坐下来在 jsfiddle 中测试了两者之间的区别。自定义 header 添加确实会添加到 OPTIONS 预检中。除此之外,我不知道为什么它是双重调用。唯一可能的结果是缓存版本被调用,然后在强制刷新 Material 后,如果您的网络服务器上有不正确配置的 memcache 版本或其他缓存插件,则可能会发生这种情况。

header 问题的示例 With Header

没有标题的问题示例 enter image description here

正如您从带有添加 header 的开发人员工具中看到的那样,它会执行预检选项请求,如果没有它,它只会收到 404。

关于php - ajax自定义 header 提交两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910220/

相关文章:

javascript - Vimeo iframe 作为背景

jquery - phalcon 和 jquery ajax

php - 检查 PHP mysql 查询字段中的逗号分隔值

javascript - 客户端和服务器端编程有什么区别?

javascript - 为一个元素设置长度(高度或宽度)减去另一个元素的可变长度,即 calc(x - y),其中 y 未知

javascript - 动画 jQuery UI 可拖动元素回到起始位置

java - 数据表数据错误地附加到表中

php - 来自 MariaDB、Drupal、php 的 UTF-8 字符

php - 如何使用 Zend_Db_Adapter 在每次调用 "query"时运行多个 SQL 查询?

c# - ASP.NET MVC 和 JQuery 获取信息到 Controller