如何通过包含&符号和/或换行符的ajax传递textarea数据?

时间:2011-06-03 16:32:22

标签: php jquery textarea json

我有一个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;

2 个答案:

答案 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);

这表明&不是你的问题,但[]是。