$ .ajax ColdFusion cfc JSON Hello World

我尽可能地简化了这个例子。 我有一个远程function:

    SELECT PersonID,FirstName,LastName FROM Person     

使用jQuery $ .ajax方法,我想制作一个无序的每个人列表。

       google.load("jquery", "1");   jQuery(function($){ $.ajax({ url: "Remote/Person.cfc?method=Read&ReturnFormat=json", success: function(data){ var str = '
    '; // This is where I need help: for (var I=0; I<data.length; I++) { str += '
  • ' + I + data[I][1]+ '
  • ' } str += '
'; $('body').html(str); }, error: function(ErrorMsg){ console.log("Error"); } }); });

我丢失的部分是我循环数据的地方。 我更喜欢使用jQuery $ .ajax方法,因为我知道$ .get和$ .post没有错误捕获。

我不知道如何处理从cfc返回的JSON。

看起来结果是json格式(请查看文档http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html )。 “如果指定returnformat =”json“并且函数返回一个查询,ColdFusion会将查询序列化为一个JSON对象,其中包含两个条目,列名数组和一列列数据数组。有关更多信息,请参阅SerializeJSON。” http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html

所以第一个数组(data.COLUMNS应该是一个列名数组.data.COLUMNS [0]会给你第一列的名称.data.DATA [0]会给你第一行查询。

一个很好的技巧是在chrome或firebug控制台中使用console.log(data)来查看其结构化forms的数据。

我没有测试过这个,但它应该很接近。 只需从数据中生成基本表。

 $.ajax({ url: 'Remote/Person.cfc?method=Read&ReturnFormat=json', dataType: 'json', success: function(response) { var str = ''; var i; var j; //loop over each column name for headers for (i = 0; i < response.COLUMNS.length; i++) { str += ''; } } str += ''; //loop over each row for (i = 0; i < response.DATA.length; i++) { str += ''; //loop over each column for (j = 0; j < response.DATA[i].length; j++) { str += ''; } str += ''; } str += '
' + response.COLUMNS[i] + '
' + response.DATA[i][j] + '
'; $('body').html(str); }, error: function(ErrorMsg) { console.log('Error'); } });

最简单的方法是直观地了解返回的JSON数据的结构。 那么横向JS对象应该不会太难。 你试过JSON Visualization吗? http://chris.photobooks.com/json/default.htm

如果你需要的只是PersonID,你也可以从CF返回PersonID的数组或列表。

或者,您可以选择CF返回纯文本,并生成所有

  • 。 通过ajax传递的消息会更大,但是你需要维护的JS代码更少。 CFML更容易维护,对吧? 🙂

    我对ColdFusion不是很熟悉,但你尝试过将数据类型设置为JSON吗?

     $.ajax({ url: 'Remote/Person.cfc?method=Read&ReturnFormat=json', dataType: 'json', success: function(response) { var data = response.DATA; var str = '
      '; for (var I = 0; I < data.length; I++) { str += '
    • ' + I + data[I][1] + '
    • '; } str += '
    '; $('body').html(str); }, error: function(ErrorMsg) { console.log('Error'); } });

    如果你回来的数据类似于:

     [["PersonID1", "FirstName1", "LastName1"],["PeronID2", "FirstName2", "LastName2"]] .. etc 

    如果您可以显示请求返回的原始JSON数据,则上述方法无效,我应该能够轻松修复它。

    此外,不确定它是否在您的代码中,但您在for循环中的行末尾错过了分号。

    选项:

    在你的情况下我会放

      

    这与returntype="string" returnformat="plain" + ,这是jQuery观点的一个问题,因为即使你按列使用serializeJSON srerialization,你也会得到丑陋的JSON。

    1. 您可以通过cfloop和concatenation手动创建JSON字符串:/
    2. 使用cfjson.cfc覆盖serializeJSON
    3. 转到Ben Nadel的网站并使用他的toJSON方法并以某种方式修改它以满足您的需求

    其他的东西是serializeJSON,返回大写的键,所以要注意,在js中使用lcase()或写.LIKETHIS。

    PS:尝试使用jQuery中的html动态创建:

     var someLiElement = $('
  • ').addClass('custom_class') .text('Foo bar') .attr('id', 'custom_id' + someInteger)

    然后将方法附加到父元素