访问发送的表单变量内的数组

时间:2013-08-12 16:06:58

标签: arrays post coldfusion

我正在使用PayPal,我需要这段代码来阅读API的付款后回复:

<cfif StructKeyExists(FORM.TRANSACTION[0],"ID_FOR_SENDER_TXN")>
    <cfset pTxnId = FORM.TRANSACTION[0].ID_FOR_SENDER_TXN />
</cfif>

但是当我运行支付响应测试工具时,我收到了这个错误:在类型为[Ljava.lang.String;。

的类型的Java对象中未定义500个元素TRANSACTION

我使用了这个循环:

<cfloop collection="#form#" item="theField">
        <cfif theField is not "fieldNames">
            #theField# = #form[theField]#<br>
        </cfif>
    </cfloop>

查看以FORM格式发送的变量,变量如下:

  • TRANSACTION [0] .ID_FOR_SENDER_TXN
  • TRANSACTION [0] .IS_PRIMARY_RECEIVER
  • TRANSACTION [0] .RECEIVER TRANSACTION [0] .AMOUNT
  • TRANSACTION [0] .STATUS_FOR_SENDER_TXN

我不知道为什么我无法访问它。

(从评论中更新)

尝试使用此代码:

<cfif isDefined("form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']")> 
     <cfset pTxnId = form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN'] />  
</cfif> 

现在我收到了错误:

  

500函数IsDefined的参数1,现在是   form ['FORM.TRANSACTION [0] .ID_FOR_SENDER_TXN'],必须是语法上的   有效的变量名称。

如果我使用

,则会出现同样的错误
form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']

form['TRANSACTION[0].ID_FOR_SENDER_TXN']

更新2

使用:

<cfif structKeyExists(FORM, "TRANSACTION[0].ID_FOR_SENDER_TXN")>

</cfif>

谢谢!

1 个答案:

答案 0 :(得分:7)

如果表单字段名称为TRANSACTION[0].ID_FOR_SENDER_TXN(这是您的调试循环指示的内容),那么您应将其解析为:

form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']

澄清:

使用此表示法访问变量时:

<cfset pTxnId = FORM.TRANSACTION[0].ID_FOR_SENDER_TXN />

ColdFusion期望这个数据结构:

http://note.io/15v3o51

它在名为transaction的表单中查找一个键,并尝试从中获取第0个索引(旁注:这在CF中无论如何都不起作用,数组以索引1开头),并且作为第一个项目在数组,它期望一个名为ID_FOR_SENDER_TXN的键结构。

但是,PayPal发送给您的实际上是使用以下格式:

http://note.io/19nTSZR

这解释了错误消息:“在类型为[Ljava.lang.String;。”的Java对象中未定义元素TRANSACTION。