【发布时间】:2015-07-15 15:10:29
【问题描述】:
这是我关于 stackoverflow 的第一个问题 - 需要各位专家的帮助。我们的网络应用程序允许用户输入转义/特殊字符。我们正在对极端情况进行一些测试。我能够通过 ajax/json 传递转义字符。
var test = JSON.stringify({
typeName: $("#typeName").val(),
invoiceType: 'NewTypeArea'
});
$.ajax({
type: "POST",
url: "BackEnd/WebService.php",
data: {
newInvoice: test
},
dataType: 'json'
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
我的后端开发人员使用转义/特殊字符来做他们的事情。当我再次拨打电话时,我得到以下 JSON 数据
[{"propName":"Special '\"'\\","typeName":"type'\"\\"}]
返回的数据是正确的。为简单起见——这个例子我只有一个对象——我把这些数据放到一个下拉列表中。
$.each(data, function(i, val) {
var output = '<option class="type" id="' + this.qfInvoiceNum + '" value="' + this.typeName + '">' + this.typeName +'</option>';
$('select#typeList').append(output);
});
它正确显示所有转义/特殊字符。例如:"type'\"\" 显示为 type'\"\
然后用户选择列表项之一。我尝试使用数据属性、值等多种方式捕获 typeName。这是一个示例:
$( '.selectChange1').change(function() {
typeGrab = $('select option.type:selected').val();
pullArea();
});
但这就是问题所在。如果他们选择带有特殊/转义字符的列表项,则控制台返回的值
"type'"
不是
"type'\"\\"
当然,当我为 JSON/AJAX 调用传入 var typeGrab 时,这是错误的。
关于如何从下拉列表中获取转义/特殊字符是否有很好的解决方案?或者,当我遍历数据时,也许我在使用 $.each 时出错了?或者,很可能,我错过了一些非常简单的东西。任何帮助或见解都会很棒。
谢谢。
附加信息。第一个解决方案确实有效。但是,我最初并没有使用它,因为有几次显示的文本不是我想要抓取的 - 这就是我尝试 data*-attributes 的原因。
例如:
$.each(data, function(i, val) {
var output = '<option id="' + this.qfInvoiceNum + '" class="type" data-index="' + this.typeName + '" >' + this.typeName +' | #' + this.qfInvoiceNum +'</option>';
$('select#typeList').append(output);
});
如果我希望 this.typeName 的值带有转义/特殊字符,则提供的解决方案不起作用。我不能使用数据属性或 html 选项值。
但是,经过大量研究,如果您希望将值传递给具有转义/特殊字符的数据属性,我发现了一个很好的解决方案。请在下面回答我。
【问题讨论】:
标签: javascript jquery ajax json custom-data-attribute