2011-09-10 64 views
2

我一直在试图编写一个脚本,可以将数据发布到与源页面不同的域上的页面。我读过所有关于这样做的问题,并且信息让我转向了jQuery.getJSON函数,但我不确定这是否可行。

这里是我的情况:

我的JavaScript变量的少数(在这个例子中,让刚刚用C1,C2,C3,C4和C5)。所以,我想将这5个变量的值发送到另一个域上的脚本。

我明白,我怎么会做这个使用类似$获得()或$。员额() - 我会做同样的事情到这一点:

$.post("myscript.php", { c1:c1, c2:c2, c3:c3, c4:c4, c5:c5 }); 

我不清楚(1)如果的getJSON (2)如果是,那么jQuery调用getJSON函数(与.post函数相比)有什么区别,以及如果在服务器端有什么不同,我需要做什么(为我的目的,我只想现在显示值的视觉)。

编辑: 在阅读答案,也许我需要澄清。我正在寻找的是一种方法(如果可能的话)将数据从一个页面发送到另一个域上的另一个页面。我理解安全问题,所以如果不可能的话,这很糟糕,但我明白。但是,如果有一种使用jQuery的方式,那就是我正在寻找的(以及使用我的c1 - c5变量的一个小例子)。谢谢。

回答

2

Ofcourse您可以使用$.getJSON()JSONP模式下将数据发送到另一个服务器(跨域)。这只是你的数据必须是查询字符串的一部分,并且由于不能有无穷无尽的查询字符串,因此可以发送的数据量有限。由于请求将显示为正常的HTTP GETparams,因此处理服务器端数据的方式不会发生变化。

下面是一个从jQuery API文档中提取的示例。这会从Flickr JSON API中提取4个最新的狗图片。

Working Demo

var c1 = "dog"; 
var c2 = "any"; 

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", { 
    tags: c1, 
    tagmode: c2, 
    format: "json" 
}, function(data) { 
    $.each(data.items, function(i, item) { 
     $("<img/>").attr("src", item.media.m).appendTo("#images"); 
     if (i == 3) return false; 
    }); 
}); 

注意如何c1c2形式传入GET参数。 jsoncallback=?参数指示jQuery将请求作为JSONP请求进行,并且在进行跨域调用时是强制性的。

这是你的脚本可以如何看:

var orderId = 1337; 
var customer = encodeURIComponent("John Doe"); 
var amount = 420; 

$.getJSON("http://www.otherserver?jsoncallback=?", { 
    oId: orderId, 
    cust: customer, 
    amnt: amount 
}, 

function(data) { 
    //process response if any 
}); 

样品HTTP请求生成:

http://www.otherserver/?jsoncallback=jQuery16305821700256783515_1315685969538&oId=1337&cust=John%2520Doe&amnt=420&_=1315685969636 

HTH。

+0

非常好 - 只是我在找什么。谢谢! – OneNerd

+0

太棒了!别客气。 –

2

不是如果你需要做一个职位。这里的名字相当具有描述性:get ... json。这是一个处理json return的get请求。然而,似乎你真正感兴趣的是发送json,而且你不需要任何特别的东西。

但是,如果你的困惑与缺乏jQuery的一个postjson功能做,那么这可能会帮助http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

1

。员额()方法将发送数据作为HTTP POST请求。在这里,它会自动查找您要发送的数据的数据类型(json或xml等)。 而.getJSON()将发送数据作为http get请求发送,这里数据的数据类型是指定的JSON。

1

听起来好像getJSON()没有用,因为没有指定处理程序来处理结果。如果您知道请求返回的数据类型是JSON,则getJSON很有用。

0

由于SOP(同源策略),您无法对其他域进行AJAX调用。

你可以用普通的POST形式来完成它,但是这会强制浏览器处理响应(显示一个新的HTML页面或执行重定向等)。

getJSON是一个GET调用,可以发送键值对作为查询字符串url。 $ .post是一个POST调用,cand将数据作为有效负载发送,还有键值对作为url中的查询字符串。 getJSON就像$ .get(url,handler,'json'),只是确保返回的是json数据。

但是,您可以将GET请求发送到不同的域,使用像动态创建IMG标签一样简单的方法。

或者你可以使用JSONP,但如果你想保持当前的上下文,它必须是GET调用。

干杯。