【发布时间】:2011-09-07 23:13:29
【问题描述】:
我有一个文本区域,我正在尝试使用 jQuery 通过 ajax 发送。我的问题是当 textarea 包含换行符和 & 符号时。
我用下面的js代码得到textarea的值:
// 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 发布的数据并且它工作正常。
如果我随后将 textarea 更改为包含 & 符号,如下所示:
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 失败,两种数据情况均出现 语法错误。
那么,如何通过 ajax 将包含换行符和 & 号的 textarea 数据发送到 php 后端,并且 json_decode 不会失败?
解决方案:
基于下面的一些 cmets,我决定更改发送数据的 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 之类的。 -
@Marc B,这条评论和下面的评论让我思考了我发送数据的方式,而不是关注数据本身。我更改了ajax代码,它突然起作用了。我更新了帖子以反映我所做的更改。所以是的,看起来有些东西正在“处理”数据,但我仍然不确定是什么......