调用AJAX不会发布仅限字母数字

时间:2015-10-08 17:50:59

标签: jquery ajax coldfusion

我正在创建一个单页面应用程序。我正在使用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列的意外字符

如果输入数字

,则无错误

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"可能更容易。