簡體   English   中英

jQuery $ .getJSON()是否可以滿足我的需求?

[英]Will jQuery $.getJSON() Do What I Need?

我一直試圖編寫一個腳本,在其中我可以將數據發布到與源頁面所在的域不同的頁面上。 我閱讀了有關這樣做的所有問題,並且信息使我進入了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函數)有什么區別,以及是否有任何區別我需要在服務器端執行不同的操作(出於我的目的,我現在想暫時以可視方式顯示這些值)。

編輯:在閱讀答案時,也許我需要澄清一下。 我正在尋找的是一種將數據從一個頁面發送到另一個域上的另一頁面的方法(即使可能的話)。 我了解安全性問題,因此,即使不可能,也很糟糕,但我了解。 但是,如果有使用jQuery的方法,那就是我要尋找的東西(還有一個使用c1-c5變量的小例子)。 謝謝。

如果您需要發布,則不需要。 這里的名稱具有相當的描述性:get ... json。 這是一個處理json返回值的get請求。 但是,似乎您真正感興趣的是發送json,並且您對此不需要任何特殊要求。

但是,如果您的困惑與jquery中缺少postjson函數有關,那么這可能會幫助http://abeautifulsite.net/blog/2008/05/postjson-for-jquery/

當然,您可以在JSONP模式下使用$.getJSON()將數據發送到另一台服務器(跨域)。 只是您的數據必須是查詢字符串的一部分,並且由於無法無限長地查詢字符串,因此您可以發送的數據量受到限制。 在服務器端處理數據的方式不會改變,因為該請求將顯示為帶有params的常規HTTP GET

這是從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;
    });
});

注意如何將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。

.post()方法將數據發送為http發布請求。 在這里,它將自動找到您要發送的數據的數據類型(json或xml等)。 而.getJSON()會將發送數據作為http get請求發送,此處數據的數據類型為JSON指定。

聽起來沒有getJSON()用處,因為未指定要使用結果的處理程序。 如果您知道從請求返回的數據類型是JSON,則getJSON很有用。

您無法通過SOP(相同來源策略)對另一個域進行AJAX調用。

您可以使用常規形式的POST來執行此操作,但這將迫使瀏覽器處理響應(顯示新的HTML頁面或執行重定向等)。

getJSON是GET調用,可以將鍵值對作為查詢字符串url發送。 $ .post是一個POST調用,可以將數據作為有效負載發送,還可以將鍵值對作為url中的查詢字符串。 getJSON就像$ .get(url,handler,'json')一樣,只是確保返回的是json數據。

但是,您可以像動態創建IMG標簽一樣輕松地將GET請求發送到不同的域。

或者,您可以使用JSONP,但如果要保留當前上下文,則必須是GET調用。

干杯。

嗯,來自http://api.jquery.com/jQuery.getJSON/的API文檔:

“描述:使用GET HTTP請求從服務器加載JSON編碼的數據。”

簡短的回答是“不”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM