Javascript发送href而不点击?

时间:2013-01-31 11:34:26

标签: javascript jquery json

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

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

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

但是我有一种情况,我需要使用此href链接发送类似的值但不单击。 e.g:

$('.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"
在这里// pref中的

!上面的部分,没有被点击。我希望我对我的要求有意义。有没有办法实现这个目标?

由于

7 个答案:

答案 0 :(得分: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”或安全形式“{{},则允许您POST | GET | ORIGIN {3}}”。
  3. 由于服务器没问题,浏览器会发出您要求的POST请求。
  4. * 备注

    • 优良作法是让您的客户端设置正在发送的内容类型 - 因此您也需要允许这样做。
    • 服务器每次操作将发出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);
    

答案 1 :(得分: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
    }
});

答案 2 :(得分:0)

这将调用网址而不会离开您所在的网站。

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

我不是百分百确定你是否可以调用另一个域,以防javascript在另一个域上运行。所以也许你需要这样做:

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

答案 3 :(得分: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
   });
}

答案 4 :(得分:0)

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

$.ajax({
    url: "http://mydomain.foxycart.com/cart/",
    type: "get",
    data: { value : true }
});

答案 5 :(得分: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   
    });
});

答案 6 :(得分:0)

可能有点迟,但由于没有接受答案,也没有人提及: 您还可以使用虚拟图像元素并将您的URL传递给它的src,从而导致没有CORS限制的get请求。沿着这些方向:

var getter = document.createElement('img');
getter.src = href; //url got from the $('#addCart') element or whatever you need