我正在创建一个单页面应用程序。我正在使用ajax来设置coldfusion会话变量。我有两个单独的按钮调用:第一个是“新按钮”,第二个是“打印标签按钮”如果输入它们,它们都会发布数字。但对于“新按钮”,我希望它在发布时接受信件或号码。有没有办法用ajax返回字母?我认为它应该允许它,因为它只是采取form.variable并创建一个变量?我不明白为什么它不会允许信件。
http://jsfiddle.net/1zka4soy/16/
如果单击打印标签按钮并输入一个数字,您将看到ajax调用及其在警报上设置的内容。 “新建”按钮的设置完全相同,但由于某些原因,它们都不允许使用字母编号。
这是一个只允许你运行数字的ajax规则吗?
CF:NewDealerSession.cfm
<cfset session.dealerwork.newdealername = form.NewDealerName >
<cfoutput> #session.dealerwork.newdealername# </Cfoutput>
JS
$(document).ready(function () {
// What happens when a user hits the "Accept" button on the dealer form
$(".label_accept").click(function () {
$('#LabelMaker').modal('hide');
});
$('#labelForm').on('submit', function (e) {
e.preventDefault();
alert($(this).serialize());
$.ajax({
// the location of the CFC to run
url: "index_proxy.cfm",
// send a GET HTTP operation
type: "post",
// tell jQuery we're getting JSON back
dataType: "json",
// send the data to the CFC
data: $('#labelForm').serialize(),
// this gets the data returned on success
success: function (data) {
console.log(data);
if (data !== "") {
var link = "DealerLabels.cfm";
window.open(link,'newStuff');
}
},
// this runs if an error
error: function (xhr, textStatus, errorThrown) {
// show error
console.log(errorThrown);
}
});
});
$(".dealer_accept").click(function(){
$('#NewDealer').modal('hide');
});
$('#addDealer').on('submit', function (e) {
alert("working");
e.preventDefault();
alert($(this).serialize());
$.ajax({
// the location of the CFC to run
url: "proxy/NewDealerSession.cfm",
// send a GET HTTP operation
type: "post",
// tell jQuery we're getting JSON back
dataType: "json",
// send the data to the CFC
data: $('#addDealer').serialize(),
// this gets the data returned on success
success: function (data) {
console.log(data);
},
// this runs if an error
error: function (xhr, textStatus, errorThrown) {
// show error
console.log(errorThrown);
}
});
});
});
错误 输入“字母名称”时 SyntaxError:JSON.parse:JSON数据的第1行第1列的意外字符
如果输入数字
,则无错误答案 0 :(得分:4)
你的coldfusion模板直接返回会话值,当值为字符串时会导致无效的json,因为使用JSON时,字符串必须用双引号括起来。这是返回json时应该是什么样子:
<cfoutput>#SerializeJSON(session.dealerwork.newdealername)#</cfoutput>
那就是说,我从来没有让coldfusion生成一个不是数组或结构的JSON字符串,所以我不知道它是否会接受它。通常json的反应看起来更像是这样:
<cfset myResult = structNew()>
<cfset myResult.newDealerName = session.dealerwork.newdealername>
<cfoutput>#SerializeJSON(myResult)#</cfoutput>
根据您的coldfusion版本和您的配置,它可能会也可能不会保留json中结构名称的大小写。你必须自己解决这个问题。它可以是{"NEWDEALERNAME":"somevalue"}
或{"newDealerName":"somevalue"}
在这种情况下,将dataType: "json"
更改为dataType: "text"
可能更容易。