我一直在尝试编写一个脚本,我可以将数据发布到与源页面不同的域上的页面。我阅读了所有关于这样做的问题,并且信息让我进入了jQuery.getJSON函数,但我不确定这是否会起作用。
以下是我的情景:
我有一些javascript变量(对于这个例子,我们只使用c1,c2,c3,c4和c5)。所以,我想将这5个变量的值发送到另一个域的脚本。
我理解如何使用$ .get()或$ .post()这样做 - 我会做类似的事情:
$.post("myscript.php", { c1:c1, c2:c2, c3:c3, c4:c4, c5:c5 } );
我不清楚(1)getJSON是否会让我到达我需要的位置,(2)如果是,则jQuery调用getJSON函数(与.post函数相比)有什么区别,以及if我需要在服务器端做任何不同的事情(为了我的目的,我现在只想在视觉上显示值)。
修改 在阅读答案时,我可能需要澄清一下。我正在寻找的是一种方式(如果可能的话)将数据从一个页面发送到另一个域上的另一个页面。我理解安全问题,所以如果不可能,它很糟糕,但我理解。但是如果有一种使用jQuery的方法,那就是我正在寻找的(以及使用我的c1-c5变量的一个小例子)。感谢。
答案 0 :(得分:2)
如果您需要发帖,请不要。这里的名字是相当具有描述性的:get ... json。这是一个处理json返回的get请求。然而,似乎你真正感兴趣的是发送json,而你不需要任何特殊的东西。
但是,如果您的混淆与jquery中缺少postjson函数有关,那么这可能会有所帮助http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/
答案 1 :(得分:2)
当然,您可以在$.getJSON()
模式下使用JSONP
将数据发送到其他服务器(跨域)。只是您的数据必须是查询字符串的一部分,并且您可以发送的数据量有限,因为您无法拥有无限长的查询字符串。在服务器端处理数据的方式没有变化,因为请求将显示为带有GET
的普通HTTP params
。
这是一个从jQuery API文档中解脱出来的例子。这将从Flickr JSON API中提取4张最新的狗图片。
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;
});
});
请注意c1
和c2
如何作为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。
答案 2 :(得分:1)
.post()方法将数据作为http post请求发送。在这里,它会自动找到您要发送的数据的数据类型(json或xml等)。 而.getJSON()将发送数据作为http get请求,这里数据的数据类型是指定的JSON。
答案 3 :(得分:1)
听起来getJSON()
没有用处,因为没有指定处理程序来处理结果。如果您知道从请求返回的数据类型是JSON,那么getJSON
非常有用。
答案 4 :(得分:0)
由于SOP(同源策略),您无法对其他域进行AJAX调用。
您可以使用普通表单POST执行此操作,但这会强制浏览器处理响应(显示新的HTML页面,或执行重定向等等)。
getJSON是一个GET调用,可以发送键值对作为查询字符串url。 $ .post是一个POST调用,cand发送数据作为有效负载,还有键值对作为url中的查询字符串。 getJSON就像$ .get(url,handler,'json'),只是确保返回的是json数据。
但是,您可以使用像动态创建IMG标记一样简单的方式向不同的域发送GET请求。
或者您可以使用JSONP,但如果您想保留当前上下文,则必须是GET调用。
干杯。
答案 5 :(得分:0)