【问题标题】:jquery POST does not return any result in httpsjquery POST 在 https 中不返回任何结果
【发布时间】:2012-05-14 11:48:07
【问题描述】:

我有一个在 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,但仍然无法正常工作。

有人有想法吗?

【问题讨论】:

  • $.POST 有效吗?那应该是小写的!
  • 你是否也包括 jQuery over https ?
  • $.POST 打错了,我用的是 $.post。
  • 我正在加载 jQuery,前面有一个路径变量。例如 /var/www/http/js/jquery.js。还尝试了完整的 https url,但没有运气。
  • 你能在 Firefox 或 Chrome 开发工具中看到任何重定向的请求,或者可能在 HTTPFox 中看到吗? https:// 网站上的基本 GET 是否按预期工作?

标签: php jquery post ssl https


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您是否有“最好使用参数发送序列化数据”的可靠来源?
    • @AnthonyGrist,是的,我读过一篇关于它的文章,正在努力寻找它。如果没有,我将编辑答案:)
    • 发送带有序列化表单数据的formData 参数有什么意义?对解决问题有何帮助?
    • @VisioN,我不明白您对“什么”和“如何”的担忧?关键是数据可以在变量下访问,并通过使其成为有效的 POST 请求,它解决了问题。
    • @Starx 请仔细阅读jQuery docsdata - 随请求发送到服务器的地图或字符串。还可以查看同一链接下的示例 #4。
    猜你喜欢
    • 2014-07-27
    • 2014-04-21
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2017-12-09
    • 2020-10-03
    • 2017-03-19
    相关资源
    最近更新 更多