仍然使用同源策略 为啥 JSON 响应在 https 链接上使用 jquery ajax 是空白的?

Posted

技术标签:

【中文标题】仍然使用同源策略 为啥 JSON 响应在 https 链接上使用 jquery ajax 是空白的?【英文标题】:using same origin policy still Why JSON response is blank with jquery ajax on https link?仍然使用同源策略 为什么 JSON 响应在 https 链接上使用 jquery ajax 是空白的? 【发布时间】:2013-01-16 16:24:24 【问题描述】:

我有一个 HTTPS 页面,在该安全页面上我正在尝试实现 jquery 自动完成插件。

我的代码如下:

function stateAutoComplete(id, widthParam)

widthParam = typeof widthParam !== 'undefined' ? widthParam : '188px';

jQuery( "#"+id).autocomplete(
    source: function( request, response ) 
        jQuery.ajax(
            url: base_url+"/stateSearchJSON",
            dataType: "jsonp",
            data:                  
                maxRows: 10,
                startsWith: request.term
            ,
            success: function( data )                                  

            response( jQuery.map( data.states, function( item ) 
                    return 
                        value: item.stateName,
                        label: item.stateName
                    
                ));
                jQuery('.ui-autocomplete').css('width', widthParam);

            
        );
    ,

我使用同源策略通过 jquery ajax 调用获取 json 响应,但是当我在 firebug net 选项卡中看到响应时,我得到空响应并且响应 url 变为红色。

我不知道为什么会发生这种情况,因为我在 http 页面上使用了相同的代码并且它在 http 页面上运行得非常好,那么为什么这个问题会出现在 https 页面上?

谁能帮帮我?

提前致谢

【问题讨论】:

你得到 302 在萤火虫中找到响应? base_url+"/stateSearchJSON - 这个 url 也应该是 HTTPS。如果不是,它不符合同源策略。 @Samy 是的,你是对的,但我知道同源策略规则,我的 base_url 是 https。我收到了回复,但它是空白的。如果我不遵循相同的起源,那么即使我也不会得到任何空白响应。 我有空白响应意味着请求成功,唯一的问题是响应是空白的。 我确定不是同源政策问题。我已经关注了。 我不确定。请检查目标 URL 功能。可能在您的代码中的某个位置,目标 URL 将被重定向到正常的 HTTP 。使用 fiddler 或其他工具逐步分析重定向。 【参考方案1】:

您必须确保请求来自:http://example.com/requestingpage.html 到 http://example.com/stateSearchJSON

而不是:http://example.com/requestingpage.html 到 https://example.com/stateSearchJSON 或http://example.com/requestingpage.html转https://differenturl.com/stateSearchJSON

否则,您将不得不添加一个回调并使用 jsonp(看起来您正在使用它)。如果您不需要它,您可能需要删除“json

【讨论】:

以上是关于仍然使用同源策略 为啥 JSON 响应在 https 链接上使用 jquery ajax 是空白的?的主要内容,如果未能解决你的问题,请参考以下文章

同源策略:为啥 JS 代码不能向其域发出 HTTP 请求?

同源策略跨域json和jsonp

为啥以及如何在脚本标签中免除同源策略?

跨域请求被阻止:同源策略不允许在 http://localhost3000 读取远程资源

为啥 XML 仍然用于 Web 服务响应,即使 JSON 更好? [关闭]

为啥从 localhost 向 localhost 发出请求时会启动同源策略?