簡體   English   中英

從跨域AJAX請求返回字符串

[英]Return String from Cross-domain AJAX Request

我正在尋找一種從跨域“ AJAX”請求返回單個JSON / JSONP字符串的方法。 與其請求字符串並讓JQuery自動將其作為通用對象返回,我不希望在轉換發生之前獲得字符串的保留。 這里的目標是自己解析它,以便我可以將其直接轉換為某種特定類型的新對象(例如Person對象)。

因此,為了清楚起見,我不希望在幕后進行任何字符串到通用對象的轉換,並且這必須在其他域中進行。

這是我想做的一個無效示例:

$.ajax({
    type: 'GET',
    url: 'http://www.someOtherDomain.com/GetPerson',
    dataType: 'text',
    success: parseToPerson
});

function parseToPerson( textToParse ) {
    // I think I can do this part, I just want to get it working up to this point
}

只要解決方案不涉及JQuery,我都會非常高興。 我更喜歡使用JQuery。 從我讀到的內容來看,用於獲取JSONP數據(動態創建腳本元素)的javascript技術可能會起作用,但我似乎無法使它對我有用。 如果我將AJAX調用中的dataType更改為“ JSONP”,則可以控制要向其請求數據的域,並且可以獲取數據,因此我知道這是可行的。

如果要從另一個域中檢索數據,則需要使用JSONP(還有其他選項,但是,如果您控制服務,則JSONP到目前為止是最簡單的)。 jQuery調用將如下所示:

$.ajax({
    // type: 'GET', --> this is the default, you don't need this line
    url: 'http://www.someOtherDomain.com/GetPerson',
    dataType: 'jsonp',
    success: parseToPerson
});

向您的服務發送的實際請求將是http://www.someOtherDomain.com/GetPerson?callback=arbitrary_function_name 在服務方面,您將需要返回以下數據:

arbitrary_function_name("the string (or JSON data) that I want to return");

因此,您需要檢查querystring參數,獲取callback參數的值,並將其回顯,就像您正在調用具有該名稱的Javascript函數一樣(通過),傳入要提供的值服務。 然后,將使用您提供的服務調用success函數。

如果要將返回的數據反序列化為Javascript對象,則最好返回JSON數據而不是返回字符串,因此服務返回的數據如下所示:

arbitrary_function_name({
    "name":"Bob Person", 
    "age":27, 
    "etc":"More data"
});

這樣,您就不必擔心解析字符串-它已經位於易於使用的Javascript對象中,可以初始化您的對象。

不確定如何將其與jsonp結合使用,但是也許轉換器是您想要的?

$.ajax(url, {
  dataType: "person",
  converters: {
    "text person": function(textValue) {
      return parseToPerson(textValue);
    }
  }
});

暫無
暫無

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

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