2

我不确定这是否可能。我有这样的链接

<a id="addCart" href="http://mydomain.foxycart.com/cart?name=test-product&price=10.00">Add to Cart</a>

单击此链接时,会将值发送到另一台服务器上的 json 购物车。

但是,我有一种情况,我需要使用这个 href 链接发送类似的值,但不被点击。例如:

$('.name').each(function() {
    while (y < data.products.length-1) {
        if($(this).text() === data.products[x].name) {
            $('.price').eq(x).text(data.products[x].price);
            //href here!
        }
        x++;
        y++;
    }
    x=0;
    y=0;
});

我需要通过这个href:

href="http://mydomain.foxycart.com/cart?value=true"

在 //href 这里!上面的部分,没有被点击。我希望我的请求是有意义的。有没有办法做到这一点?

谢谢

4

7 回答 7

1

对您的问题的简短回答,您可以做到。但是,它要求您在另一端具有访问权限,以便以接受跨站点请求的方式修改脚本。但是,您应该非常小心,因为这意味着许多安全风险。

可以这样做:

链接:

<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;
}

以上所有内容都将遵循以下顺序:

  1. 浏览器向服务器发送一个OPTIONS方法。这是浏览器的“安全”措施,用于查看服务器是否允许跨站点(无论服务器允许)发布/请求
  2. 然后服务器以“Access-Control-Allow-Origin”响应,告诉浏览器如果请求来自“ http://from.com ”或“ https ”的安全形式,则允许您发布|GET|ORIGIN : //来自.com “。
  3. 由于服务器没问题,浏览器会发出您要求的 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);
于 2013-04-10T18:15:21.370 回答
0

我是不是弄错了,但你不只是想这样做吗

$.ajax({
    url: "http://mydomain.foxycart.com/cart/",
    type: "get",
    data: { value : true }
});
于 2013-01-31T11:49:55.523 回答
0
var href = "...";

if($(this).text() === data.products[x].name) {
   $('.price').eq(x).text(data.products[x].price);

   //put this code
   $.ajax(href, function(resp) {
        //do something
   });
}
于 2013-01-31T11:45:05.713 回答
0

这将在不离开您所在的网站的情况下调用 url。

jQuery.ajax({
    url: 'http://mydomain.foxycart.com/cart?value=true',
    success: function(data) {}
});

我不能 100% 确定您是否可以调用另一个域,以防 javascript 在另一个域上运行。所以也许你需要做:

jQuery.ajax({
    url: '/cart?value=true',
    success: function(data) {}
});
于 2013-01-31T11:43:09.710 回答
0

您可以使用 JSON.parse 解析 Url 的 Href 值,并使用循环等进行处理。防止点击链接......

在这里查看http://jsfiddle.net/RKc6f/

$(function() {
    $("#addCart").on('click', function(e) { 
        var url = $(this).attr("href");
        var urlParams = url.substring(url.indexOf("?")+1);

        var myProduct = (JSON.parse('{"' + decodeURI(urlParams.replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}'));
        console.log(myProduct.name);
        console.log(myProduct.price);
        //do the processing    
        e.preventDefault();//preven going to other page   
    });
});
于 2013-01-31T11:59:31.887 回答
0

尝试这个

 window.location="http://mydomain.foxycart.com/cart?value=true";

或者

window.location.href="http://mydomain.foxycart.com/cart?value=true";

但是,如果这是您想要的,这会将浏览器带到该位置

或者不离开页面..你可以使用ajax。

jQuery.ajax({
    type: 'post', 
    url: 'http://mydomain.foxycart.com/cart?value=true',
    success: function(data) {
        // do your stuff
    }
});
于 2013-01-31T11:40:44.897 回答
0

可能有点晚了,但由于没有接受任何答案,而且还没有人提及:您还可以使用虚拟图像元素并将您的 url 传递给它的 src ,从而导致没有 CORS 限制的 get 请求。沿着这些思路:

var getter = document.createElement('img');
getter.src = href; //url got from the $('#addCart') element or whatever you need
于 2015-07-21T12:04:39.183 回答