【问题标题】:Will jQuery $.getJSON() Do What I Need?jQuery $.getJSON() 会做我需要的吗?
【发布时间】:2011-09-11 04:20:42
【问题描述】:

我一直在尝试编写一个脚本,我可以将数据发布到与源页面所在域不同的域中的页面。我阅读了所有关于这样做的问题,信息引导我使用 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) 如果是,那么 getJSON 函数(与 .post 函数相比)的 jQuery 调用有什么区别,以及是否在服务器端我需要做任何不同的事情(出于我的目的,我现在只想直观地显示这些值)。

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

【问题讨论】:

    标签: jquery .post getjson


    【解决方案1】:

    当然,您可以在JSONP 模式下使用$.getJSON() 将数据发送到另一台服务器(跨域)。只是您的数据必须是查询字符串的一部分,并且您可以发送的数据量受到限制,因为您不能拥有无限长的查询字符串。在服务器端处理数据的方式不会改变,因为请求将显示为普通的 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。

    【讨论】:

    • 非常好 - 正是我想要的。谢谢!
    【解决方案2】:

    如果您需要发帖,则不需要。该名称在这里具有相当的描述性:get ... json。这是一个处理 json 返回的 get 请求。然而,您似乎真正感兴趣的是发送 json,并且您不需要任何特殊的东西。

    但是,如果您的困惑与 jquery 中缺少 postjson 函数有关,那么这可能会有所帮助 http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          由于 SOP(同源策略),您不能对另一个域进行 AJAX 调用。

          您可以使用普通形式的 POST 来执行此操作,但这会强制浏览器处理响应(显示新的 HTML 页面,或执行重定向等...)。

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

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

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

          干杯。

          【讨论】:

            【解决方案6】:

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

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

            所以简短的回答是“不”。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-11-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-23
              相关资源
              最近更新 更多