gpt4 book ai didi

php - .ajax跨域和MySQL无法正常工作

转载 作者:行者123 更新时间:2023-11-29 14:37:51 25 4
gpt4 key购买 nike

单击注册表单的按钮后,我在不同的域上执行 .ajax 请求,特别是在主域的子域上,这是代码:

$.ajax({
type: "GET",
url: "http://sub.domain.com/query.php?s="+a,
crossDomain:true,
cache: false,
success: function(html){
alert(html);
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
},
statusCode: {
404: function() {
alert('page not found');
}
}
}

在 query.php 中,我有 3 个 php header 函数和一个查询,但是当调用此页面时,我在 db 中看到 2 条记录非常奇怪。

查询.php:

<?php 
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers:X-Requested-With');
header("Access-Control-Allow-Methods: GET");

$db = mysql_connect('localhost','usr','pwd') or die("Database error");
mysql_select_db('dbname', $db);
$termine=$_GET['s'];
$dati_arr=explode("|", $termine);
$values = array_values($dati_arr);
$query="INSERT INTO tabella VALUES ('','".implode("','", $values)."')";
if(mysql_query($query)){echo "ok";}
?>

一次查询,但我在数据库中找到 2 条记录,但找不到错误。

最佳答案

当进行跨源ajax时,浏览器可能会执行所谓的preflight request - 它基本上使用 OPTIONS 请求方法执行一个请求,以查明服务器是否允许跨源请求、允许哪些 http 方法等等。如果检查通过,那么它会执行实际的请求(并且会记住OPTIONS请求的结果是什么(受缓存策略的约束),这样下一次就不需要这样做了。

您的 php 代码不区分预检请求和实际的“do-it”请求,因此插入数据两次。除了发回跨源 header 之外,您应该在采取任何操作之前检查 http 方法。顺便说一句, GET 请求有副作用,这有点狡猾。

关于php - .ajax跨域和MySQL无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com