【问题标题】:How to use Coldfusion json data to match textbox input and display value in second textbox如何使用 Coldfusion json 数据匹配文本框输入并在第二个文本框中显示值
【发布时间】:2014-09-25 20:01:01
【问题描述】:

我有一个表单,它有一个名为 txtMaterial 的文本框,它有一个 .txtmaterial 类和另一个名为 txtDescription 的文本框。 当用户输入材料编号时,ajax 查询运行并检查是否匹配,如果匹配,则 txtDescription 文本框将填充描述。

我有以下功能来搜索材料并以 Coldfusion JSON 格式返回数据:

$.ajaxSetup({ cache: false });

    $("#frmCreateClaimLine tbody").on("change", ".txtmaterial", function(){

        var row = $(this).closest("tr");
        var material = row.find("input.txtmaterial").val();


          $.ajax({
            type: "GET",
            url:"index.cfm?action=material.search_materials",
            cache: false,
            datatype: 'json',
            data:{
                material_id: material
            },
            success:function(result){
             console.log(result);
            }});

    });

console.log 的结果是:

{"ROWCOUNT":1,"COLUMNS":["TC_MATERIAL","TC_DESCRIPTION","TC_LANGUAGE"],"DATA":{"TC_MATERIAL":["000000000000061234"],"TC_DESCRIPTION":["THERMOMETER "],"TC_LANGUAGE":["E"]}}

编辑: 这是我的查询:

<cfquery name="qryGetMaterials" datasource="FR01CLDB" maxrows="100">
    SELECT
        TC_MATERIAL,
        TC_DESCRIPTION,
        TC_LANGUAGE
    FROM
        TBYE53_CSP_MATRL_LANGUAGE_DIM
    WHERE
        UPPER(TC_MATERIAL) = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Trim(UCase(material_id))#">
    AND
        TC_LANGUAGE = <cfqueryparam cfsqltype="cf_sql_varchar" value="#UserLanguage#">
</cfquery>

<cfset theJSON = SerializeJSON(qryGetMaterials,true)>

<cfoutput>#theJSON#</cfoutput>

我想不通的是如何检查 txtMaterial 的值是否与返回的 JSON 数据中的值匹配,并在描述字段中显示描述。

任何帮助将不胜感激。

【问题讨论】:

  • 如果您执行JSON.parse(result) 将使结果成为更易于操作的对象。但是在冷融合方面,如果您使用 serializejson() 并将第二个值更改为 true 我相信会更容易一些。它使它更容易使用。然后您将拥有一个与 CF Query 对象非常相似的 JS 对象。然后,您可以遍历 javascript 中的行。 help.adobe.com/livedocs/coldfusion/8/htmldocs/…
  • 嗨,我已经使用 serializejson() 序列化了输出。
  • 编辑:假设你的查询是 exact 匹配,你不需要检查值。只需验证ROWCOUNT&gt; 0。如果是,您就知道找到了匹配项。然后从result.DATA.TC_DESCRIPTION[0] 中获取值。此外,您在 ajax 调用中有错字。应该是:dataType: 'json'
  • 是的,但是试试serializeJSON(query,true),那么对象的组织方式就不同了,如果我没记错的话,在 Javscript 中使用起来会更容易。
  • @Leeish - 查看示例结果,我相信他们已经在这样做了 :)

标签: jquery ajax json coldfusion


【解决方案1】:

假设您的查询是 exact 匹配,则无需检查值。只需验证ROWCOUNT 是否大于零。如果是,您就知道找到了匹配项。然后获取第一行中的描述并更新您的文本字段

    if (result.ROWCOUNT > 0) {
        var descrip = result.DATA.TC_DESCRIPTION[0];
        // ... update text field
    }

另外,$.ajax 调用中有一个小错字。它应该是dataType(大写“T”),而不是datatype

【讨论】:

  • 感谢大家的意见,在修正错别字并使用@Leigh 的建议后,我现在可以正常工作了。
【解决方案2】:

改变这个:

success:function(result){
   console.log(result);    
}

到这里:

success:function(result){
  if(material == result.DATA.TC_MATERIAL[0])
  {
    //PUT YOUR CODE HERE
  }
}

工作小提琴:http://jsfiddle.net/robertrozas/fwdwL5eh/2/

【讨论】:

  • 如果我添加这个,我会得到以下错误:TypeError: result.DATA is undefined
  • 我添加了一个示例小提琴
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多