我有一個textarea,我試圖通過jQuery與jQuery發送。我的問題是當textarea包含換行符和符號(&)。如何通過包含&符和/或換行符的ajax傳遞textarea數據?
我得到textarea的值用下面的JS代碼:
// Find all the fields with class dirty
$('#customer .dirty').each(function() {
fieldName = $(this).attr('id');
fieldValue = $(this).val();
// Create an object of dirty field names and values
var fields = { 'fieldName' : fieldName, 'value' : fieldValue };
// Add the object of field names and values to the custRecordToUpdate array
custRecordToUpdate.push(fields); // note: this was initialized before
});
var arrayToSend = {
customer : custRecordToUpdate
};
var dataToSend = JSON.stringify(arrayToSend);
隨着textarea的值,如下所示:
1/8 CLEAR MIRROR
3/8 CLEAR GLASS
如果我的console.log(dataToSend),我獲得以下內容:
{"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS"}]}
在PHP腳本上,我json_decode發佈的數據,它工作正常。
如果我再更改文本區域包括一個符號如下:
1/8 CLEAR MIRROR
3/8 CLEAR GLASS & GLASS
的json_decode失敗。所述的console.log(dataToSend)顯示以下內容:
{"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}]}
json_last_error()顯示器語法錯誤
如果更改js代碼以上這樣:
fieldValue = encodeURIComponent($(this).val());
然後console.log(dataToSend)顯示:
{"customer":[{"fieldName":"cust_note","value":"1%2F8%20CLEAR%20MIRROR%0A3%2F8%20CLEAR%20GLASS"}]}
和json_decode失敗與兩個數據的情況下與語法錯誤。
那麼,如何發送包含換行符和&符號的textarea數據通過ajax到php後端,並讓json_decode不會失敗?
解決方案:基於以下一些意見
,我決定改變發送數據的Ajax代碼,而這個問題解決了,雖然我不知道爲什麼。
無論如何,這裏是代碼,以防萬一它可以幫助其他人。
var returnedHTML = $.ajax({
type: "POST",
url: 'index.php/customer/save_edit_customer',
//data : "data="+dataToSend, // This is how I was sending it before
data : { "data" : dataToSend }, // This is the new code that works!
async: false,
cache: false
}).responseText;
當我在我的PHP安裝(5.3.2-1)上執行'print_r(json_decode($ your_bad_sample_here))'時,我得到了預期的對象。我建議在調用json_decode()之前立即拋出你在PHP端收到的字符串。最有可能的是,你已經有了某些數據,例如magic_quotes等。 – 2011-06-03 16:41:41
@Marc B,這個評論,以及下面的內容讓我想到了我發送數據的方式,而不是關注數據本身。我改變了Ajax代碼,它突然發揮作用。我更新了帖子以反映我所做的更改。所以是的,它看起來像是什麼「啃」數據,但我仍然不確定是什麼... – Julio 2011-06-08 20:05:53