2

我有一个在http://mysite.com上运行良好的 jquery 脚本

看起来像这样:

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,但它仍然无法正常工作。

任何人的想法?

4

2 回答 2

1

http 和 https 被认为是不同的域,所以这是一个跨域问题。修复方法是:

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

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

header('Access-Control-Allow-Origin: *');
于 2012-05-04T23:08:33.800 回答
-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()方法。

于 2012-05-04T23:07:47.050 回答