将jQuery $ .getJSON()做我需要的吗?

时间:2011-09-10 19:24:51

标签: jquery .post getjson

我一直在尝试编写一个脚本,我可以将数据发布到与源页面不同的域上的页面。我阅读了所有关于这样做的问题,并且信息让我进入了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变量的一个小例子)。感谢。

6 个答案:

答案 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张最新的狗图片。

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。

答案 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)

嗯,来自http://api.jquery.com/jQuery.getJSON/的API文档:

  

“描述:使用GET HTTP从服务器加载JSON编码的数据   请求“。

如此简短的回答是“不。”