在我的大多数AJAX函数中,我必须对用户输入的自由文本进行双重编码,即我必须执行encodeURIComponent(encodeURIComponent(myString))。
如果我只做一次大多数符号,除了双引号和长连字符之外。
如果我警告单个编码引号的结果被编码,但它会破坏JSON字符串,这就是我感到困惑的原因。
这是JavaScript的错误还是我错过了什么?它与你在PHP中对编号符号进行双重编码的方式有关吗?
您好,
以下是允许用户存储针对某些内容的注释的代码:
function saveAdminNote() {
var note = encodeURIComponent(encodeURIComponent($('#adminNote').val().replace(/(\r\n|\n|\r)/gm,""))) ;
JSON = '{"mode":"UPDATE_INTNOTE", "jobid":'+jobId+', "note":"'+note+'"}' ;
clearTimeout(tOut2) ;
tOut2 = setTimeout(function(){
$.ajax({
data: 'dataString='+JSON,
url: 'core/job-builder-controlV2.php',
type: 'POST',
success: function(data){
if(data)
{
$.prompt(data) ;
}
}
})
}, 250) ;
}
因此,如果我的数据结构是扁平的,那么使用JSON没有任何优势吗?
我的印象是JSON提供了更多的安全性?
答案 0 :(得分:2)
不要手动构造JSON,让正确的JSON.stringify
方法为您完成工作(并且不要覆盖全局JSON对象)。
json = JSON.stringify({
"mode":"UPDATE_INTNOTE",
"jobid": jobId,
"note": $('#adminNote').val()
})
答案 1 :(得分:2)
基本问题是你试图通过将字符串混合在一起来构建JSON(而不是使用JSON库)...并编码这些字符串的一部分(而不是编码生成的JSON字符串(即你的非URI数据)想要加入URI)... jQuery会为你做什么)。
如果您想将JSON作为表单编码数据请求的一部分提交,那么您将:
$.ajax({
data: {
dataString: JSON.stringify({
"mode": "UPDATE_INTNOTE",
"jobid": jobId,
"note": $('#adminNote').val()
})
},
…
由于这里有一个平面数据结构(即数据中没有对象或数组),因此根本不需要使用JSON。
$.ajax({
data: {
"mode": "UPDATE_INTNOTE",
"jobid": jobId,
"note": $('#adminNote').val()
},
(然后,在您的PHP中,只需访问$_POST['mode']
等,而不是解析JSON,然后从结果对象中获取数据)