对您的问题的简短回答是,您可以做到。但是,它要求您在另一端具有访问权限,以便以接受跨站点请求的方式修改脚本。但是,您应该非常小心,因为这意味着许多安全风险。
可以这样做:
链接:
<a href="http://mydomain.foxycart.com/cart?value=true" id="send_without_click">There is a link</a>
Javascript/JQuery 代码:
$(document).ready(function () {
var a_handler = "#send_without_click";
var $a = $(a_handler);
var a_url = $a.attr('href');
$.ajax({
type: 'POST',
url: a_url,
crossDomain: true,
data: {
href: a_url
},
beforeSend: function () {
//Do something before send. If not just remove the "beforeSend" part...
},
success: function (responseData, textStatus, jqXHR) {
//the responseData is what you will get as response from the server
var value = responseData.someKey;
},
error: function (responseData, textStatus, errorThrown) {
alert('POST failed.');
}
});
});
在服务器端,接收发布请求的页面必须定义一些标头才能接收 AJAX 调用。这将允许您的脚本进行跨域 POST、GET 和 OPTIONS。这是 PHP 中的一个示例:
示例文件cart.php
switch ($_SERVER['HTTP_ORIGIN']) {
case 'http://from.com': case 'https://from.com':
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type');
break;
}
以上所有内容都将遵循以下顺序:
- 浏览器向服务器发送一个OPTIONS方法。这是浏览器的“安全”措施,用于查看服务器是否允许跨站点(无论服务器允许)发布/请求
- 然后服务器以“Access-Control-Allow-Origin”响应,告诉浏览器如果请求来自“ http://from.com ”或“ https ”的安全形式,则允许您发布|GET|ORIGIN : //来自.com “。
- 由于服务器没问题,浏览器会发出您要求的 POST 请求。
*备注
- 让您的客户端设置它发送的内容类型是一种很好的做法——因此您也需要允许这样做。
- 服务器每次操作会发出 2 个请求
- 安全隐患正在增加。'Access-Control-Allow-Origin: *' 有点危险。
- 这不适用于非常旧的浏览器,也可能不适用于移动浏览器。
- 始终返回上面的标头,而不仅仅是OPTION请求。
编辑:
如果您知道网站(外部)正在使用JSONP Ajax,我还找到了一种检索数据的方法。
//JSON format:
{"name":"stackoverflow","id":5}
//JSONP format:
func({"name":"stackoverflow","id":5});
如果您知道example.com正在提供看起来像 JSONP 的 JSON 文件,那么即使您不在example.com域中,您也可以使用这样的代码来检索它:
function func(json){
alert(json.name);
}
var elm = document.createElement("script");
elm.setAttribute("type", "text/javascript");
elm.src = "http://example.com/jsonp";
document.body.appendChild(elm);