【问题标题】:.ajax cross domain and MySQL do not work correctly.ajax 跨域和 MySQL 无法正常工作
【发布时间】:2012-01-28 09:40:47
【问题描述】:

单击注册表单的按钮后,我在不同域上执行 .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 和一个查询,但是当调用此页面时,我在 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 调用的代码。可能是您附加到一个触发两次的事件。

标签: php jquery mysql header cross-domain


【解决方案1】:

在做跨域ajax的时候,浏览器可能会做一个preflight request——它基本上是用OPTIONS的请求方法做一个请求,以查明服务器是否允许跨源请求,允许哪些http方法以及很快。如果检查成功,那么它会执行实际请求(并且会记住 OPTIONS 请求的结果是什么(取决于缓存策略),以便下一轮它不需要这样做。

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

【讨论】:

    【解决方案2】:

    您发布的代码一切正常。我认为将所有html + js代码发布会更有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2013-10-07
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多