我有一个jquery脚本,可以在 http://mysite.com 上运行良好
看起来像这样:
Javascript:
$('#form_changePass').live('submit', function() {
//alert('form_changePass cliked');
$.POST("_ajaxCall.php", $(this).serialize(),
function(data){
var json = eval('('+data+')');
//alert(data);
if(json.message=='alert') {
$('div.info').hide();
$('div.alert').show().html(json.string);
}
if(json.message=='info') {
$('div.alert').hide();
$('div.info').show().html(json.string);
}
}
);
return false;
})
PHP脚本:
if ($_POST['formType']=="form_changePass") {
.....
.......
$arr = array( 'message' => 'info', 'string' => $INFO['updatePass']);
echo json_encode($arr);
}
现在,当我将域移动到https中时,jquery脚本不再工作。我没有返回任何返回值。什么也没发生。
我还尝试在javascript中将POST更改为getJSON,并在php脚本中将$_POST更改为$_GET,但它仍然不起作用。
有人有想法吗?
http 和 https 被认为是不同的域,因此这是一个跨域问题。修复是:
header('Access-Control-Allow-Origin: https://domain.com');
将其添加到您的 php 脚本中。或者这仅在开发中,因此您无需太担心:
header('Access-Control-Allow-Origin: *');
.serialize
将表单数据序列化为字符串,因此请改用参数发送它们。
$('#form_changePass').on('submit', function() {
//alert('form_changePass cliked');
$.POST("_ajaxCall.php", { formData: $(this).serialize() },
function(data){
var json = eval('('+data+')');
//alert(data);
if(json.message=='alert') {
$('div.info').hide();
$('div.alert').show().html(json.string);
}
if(json.message=='info') {
$('div.alert').hide();
$('div.info').show().html(json.string);
}
}
);
return false;
})
并停止使用.live()
方法,它们现在已被弃用。使用.on()
方法。