我有一个textarea表单,我试图通过ajax与jQuery发送。我的问题是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不会失败?
解决方案:
基于下面的一些评论,我决定更改发送数据的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;
答案 0 :(得分:2)
假设您的文本保存在变量textareaText中,请执行此操作
var val = textareaText.replace('&', '__and__');
将此作为ajax发送
并在服务器端
假设您的json_decode`d值保存在名为$ data的变量中,请执行以下操作:
$val = str_replace( '__and__', '&', $data['value'] );
这样你就可以在不让你的json_decode失败的情况下保留&符号
您可以使用其他内容而不是和作为占位符
虽然令人困惑,但为什么它会破裂。
答案 1 :(得分:2)
我不确定你的物体应该是什么形状,但如果我改变它对我有用:
{"customer":[{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}]}
要
{"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}}
即。从json对象中删除数组语法。
这是我的测试...
var customer = {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}};
alert(customer.customer.fieldName);
alert(customer.customer.value);
这表明&不是你的问题,但[]是。