2013-07-11 34 views
0

我正在使用YUI io將數據發佈到我的服務器。我有一些問題,如æøå發送外國字符。如何使用YUI發送外部字符io(XMLHttpRequest)

第一種情況:一種形式被髮送到服務器

Y.io(url, { 
    method: 'POST', 
    form: { 
     id: 'myform', 
     useDisabled: true 
    } 
}); 

這將發佈表單到服務器的內容。如果我有一個名爲「test1」的字段包含「å」,那麼在服務器上我會看到REQUEST_CONTENT =「test1 =%C3%A6%C3%B8%C3%A5」。這可以很容易地用urldecode功能,沒問題進行解碼,但是......

第二種情況:數據發佈是這樣的:

Y.io(uri, { 
    data : '{"test1":"æøå"}'), 
    method : "POST" 
}); 

現在我看到這個在服務器REQUEST_CONTENT =「{」測試1 「:」 ├ª├©├Ñ 「}」。我怎樣才能解碼?爲什麼它會這樣發送?

我知道我可以在發送它之前使用encodeURIComponent()對字符串進行編碼。但是io請求實際上是Model Sync操作的一部分,所以我不直接調用io。我正在做這樣的事情:

Y.User = Y.Base.create('user', Y.Model, [Y.ModelSync.REST], {....}); 
var user = new Y.User(); 
user.set('test1', 'æøå'); 
user.save(); 

因此,每次設置/讀取屬性時編碼/解碼都沒有意義。

另外我試圖在請求頭中設置charset = utf-8,但是這並沒有改變任何東西。

編輯

我已經在Chrome中做了一些更多的調試,並請求與該行的代碼創建:

transaction.c.send(data); 

transaction.c是XMLHttpRequest,並(使用Chrome調試器)我可以看到數據是「{」test1「:」「」 「當執行上面的代碼行時,顯示一個掛起的網絡條目(在chrome調試器的網絡選項卡下)。請求有效負載{顯示「測試1」:「├ª├©├Ñ」} 頭是:

Accept:application/json 
Content-Type:application/json; charset=UTF-8 

回答

0

ModelSync.REST具有serialize方法,其決定將它傳遞給之前如何在模型中的數據變成了串Y.io.默認情況下,它使用JSON.stringify(),它返回您所看到的內容。您可以使用JSON在服務器中對其進行解碼。通過你提到的urldecode我猜你在服務器上使用PHP。在這種情況下,你可以使用json_decode這將給你一個關聯數組。如果我沒有記錯的話(我沒有在使用了一段PHP),它應該是這樣的:

$data = json_decode($HTTP_RAW_POST_DATA, true); 

/* 
array(1) { 
    ["test1"] => "æøå" 
} 
*/ 

另一種選擇是讓你重寫serialize方法在User模型。 serializeModelSync.REST在通過IO發送數據之前將數據轉換爲字符串的一種方法。您可以在模型中的數據變成了常規查詢字符串的方法的使用the querystring module替換:

Y.User = Y.Base.create('user', Y.Model, [Y.ModelSync.REST], { 
    serialize: function() { 
    return Y.QueryString.stringify(this.toJSON()); 
    } 
}); 

最後,ModelSync.REST假定所以你需要刪除默認的頭,讓你可以使用JSON IO使用純文本。您應該在代碼中添加此代碼:

delete Y.ModelSync.REST.HTTP_HEADERS['Content-Type']; 
+0

感謝您的回覆@juandopazo。不幸的是,我不使用PHP,而是使用Domino服務器。所以我沒有可用的json_decode。我已經多看了第二個選項。但我無法理解它。使用像這樣的字符串:Y.log(Y.JSON.stringify(Y.JSON.parse('{「test1」:「æøå」}')));不會編碼字符...另見我在編輯 –

+0

呃!骨牌!到過那裏。我更新了我的答案,試圖更清楚「serialize」的作用。 – juandopazo

+0

序列化似乎是做一些工作的好地方。我會試一試。謝謝您的幫助。 –

相關問題