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

标签 php jquery mysql header cross-domain

单击注册表单的按钮后,我在不同的域上执行 .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/

相关文章:

php - 在 mysql php webservice 中搜索

javascript - jQuery 检查 url 是否响应

javascript - jQuery 中的选项过滤器

PHP CodeIgniter-combobox 值未在数据库中更新

mysql - 如何从有条件的 3 个表中加入

php - 在php中使用for循环时如何检查最后一个循环?

php - 如何阻止 PHP 通知出现在 wordpress 中?

PHP 记录错误信息

javascript - jQuery/Javascript : setInterval check if DOM element exists?

mysql - 使用 SAS 主键