使用jsonp的跨域请求:从https到http

时间:2013-10-23 18:04:22

标签: javascript jquery ajax https jsonp

我遇到以下问题:我需要将网站页面(https://test.com)上的一些数据发送到另一个(例如http://anotherdomain.com)。用户只需在文本框中输入数据并单击按钮即可。此页面上的脚本将处理单击事件并将GET请求(使用jQuery ajax方法)发送到http://anotherdomain.com

var enteredValue = $('#MytextBox').val();

function jsonpCallbackFunc(data) 
{
}

$.ajax({
    url: 'http://anotherdomain.com/qwerty/ajaxpage.php',
    data: { valuefield: enteredValue },
    dataType: 'jsonp',
    jsonp: 'callback',
    jsonpCallback: 'jsonpCallbackFunc',
    success: function (json) {
          // some code
    }
})

我使用FireFox收到了下一个错误 - “阻止加载混合活动内容http://anotherdomain.com/qwerty/ajaxpage.php ...”。 IE9和Chrome的情况相同。

问题:我们如何解决这个问题?我们可以只允许这个脚本只用于一个站点,或者我们可以使用另一段代码(不是jQuery + jsonp)吗?

提前感谢您的帮助。

P.S。从“http”-site,此代码按预期工作。

更新: 我们使用另一个“https”-url(https://anotherdomain.com/qwerty/ajaxpage.php)解决了该问题。我们以前尝试过使用它,但它有不受信任的证书。现在它正常工作。感谢您的帮助和建议。

2 个答案:

答案 0 :(得分:2)

这是由于 CORS 造成的。当您向其他域请求时,可能会在 ajax 调用的条件下发生预检请求。您正在使用jQuery,因此将在您的请求中设置自定义标头。所以使用

  

访问控制请求报头

     

访问控制允许来源

     

接入控制允许的方法

请参阅cors及其implementation

答案 1 :(得分:1)

这也应该在服务器中允许,尝试在处理请求的地方添加它

<?php header('Access-Control-Allow-Origin: *'); ?>

希望这可能会有所帮助