jquery POST不会在https中返回任何结果

时间:2012-05-04 23:04:51

标签: php jquery post ssl https

我有一个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,但它仍无效。

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

http和https被视为不同的域名,因此它是一个跨域问题。修复是:

header('Access-Control-Allow-Origin: https://domain.com');

将此添加到您的php脚本中。或者这只是在开发中,所以你不必太担心:

header('Access-Control-Allow-Origin: *');

答案 1 :(得分:-1)

.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()方法。