如何通过包含&符号和/或换行符的ajax传递textarea数据?
我有一个textarea的forms,我试图通过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;
假设您的文本保存在变量textareaText中,请执行此操作
var val = textareaText.replace('&', '__and__');
将此作为ajax发送
并在服务器端
假设您的json_decode`d值保存在名为$ data的变量中,请执行以下操作:
$val = str_replace( '__and__', '&', $data['value'] );
通过这种方式,您可以在不让json_decode失败的情况下保留&符号
你可以使用其他东西而不是作为占位符
虽然令人困惑,但为什么它会破裂。
我不确定你的物体的形状应该是什么,但如果我改变它对我有用:
{"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对象中删除array-syntax。
这是我的测试……
var customer = {"customer":{"fieldName":"cust_note","value":"1/8 CLEAR MIRROR\n3/8 CLEAR GLASS & GLASS"}}; alert(customer.customer.fieldName); alert(customer.customer.value);
这表明&不是你的问题,而是[]。