.ajax跨域和MySQL不能正常工作



我在不同的域上执行。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和一个查询,但当这个页面被调用时,我在数据库中看到2个记录非常奇怪。

query.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请求——它基本上是用一个请求方法OPTIONS来查找服务器是否允许跨域请求,哪些http方法被允许等等。如果检查无误,那么它将执行实际的请求(并将记住OPTIONS请求的结果是什么(受缓存策略的影响),以便下次它不需要这样做。

你的php代码没有区分预飞行请求和实际的"做它"请求,所以插入数据两次。除了发送回跨源报头之外,在采取任何行动之前,您应该检查http方法。顺便说一句,GET请求有副作用是有点危险的。

您发布的代码都没问题。我认为发布所有html+js代码会更有用

相关内容

  • 没有找到相关文章

最新更新