2010-07-15 2 views
0

나는 다음과 같은 코드로 시작하는 페이지에이 오류ColdFusion은 선형으로 스크립팅됩니까? 왜이 오류가 발생 했습니까?

Element CUSTOMERID is undefined in CLIENT. 
D:\Inetpub\wwwsitecom\wwwroot\rders.cfm:296 

을받은 :

<cfif NOT CreateObject("component","User.User").IsLoggedIn()> 
    <script type="text/javascript"> 
     window.location.href='/index.cfm'; 
    </script> 
    <cfabort> 
</cfif> 

<cfif NOT IsDefined("client.customerid")> 
    <cfparam name="client.customerid" default="0"> 
    <script type="text/javascript"> 
    alert("We're sorry."); 
    window.location.href="/logout.cfm"; 
    </script> 
    <cfabort> 
</cfif> 

라인에 296

<cfinvoke component="Account" method="getAccessInfo" returnvariable="getInfo"> 
    <cfinvokeargument name="customerid" value="#client.CustomerID#"> 
</cfinvoke> 

IsLoggedIn 기능이 코드 조각을 가지고

<cfif NOT StructKeyExists(client,"customerid")> 
    <cfset strIsLoggedIn = 0> 
</cfif> 

ColdFusion에서 스크립트를 선형 적으로 처리하는 경우 페이지의 첫 번째 부분을 처리하지 않고 정의되지 않은 client.customerid의 296 행을 어떻게 얻었습니까?

ColdFusion에서 스크립트를 선형 적으로 처리하지 않는 경우이 오류를 방지하려면 어떻게합니까?

+0

이 문제를 해결하려면 일반적인 디버그 기술을 사용해야 할 수도 있습니다. CFDUMP는 당신의 친구입니다. – Henry

+0

Henry, 오류가 발생하여 이메일로 전송되는 덤프가 있습니다. 여기에는 클라이언트 범위 목록이 포함됩니다. 전체 클라이언트 범위가 비어 있습니다. 클라이언트에는 아무것도 없다! 오류와 마찬가지로 296 줄 앞에 나타나는 다른 클라이언트 변수에 대한 참조가 있기 때문에 이상합니다. – davidj

+0

시도해 볼 수 있습니까? ? 작동하는지 확인 – Henry

답변

0

먼저 client이라는 변수를 어딘가에 (<cfoutput> 또는 <cfloop> 태그의 암시 적 범위에 있음) 생성하지 않았는지 확인합니다. CF는 지연 언어이므로 의미가 변경 될 수 있으며 client.CustomerID에 대한 참조는 Client 범위가 아닌 client 변수에서 찾을 수 있습니다.

두 번째로 리디렉션을 수행하려는 경우 으로 보내주십시오.이 미친 JavaScript 리디렉션 대신 <cflocation>을 사용하십시오. JavaScript는 클라이언트 측에서 실행된다는 점을 기억하십시오. 브라우저가 JavaScript를 사용하지 않도록 설정하는 것이 가능합니다 (드물지도 않습니다). <cflocation>은 HTTP 3xx 응답을 전송하므로 JavaScript가 활성화되어 있는지 여부에 관계없이 HTTP를 구현하는 모든 브라우저에서 올바르게 작동합니다. 리다이렉트되기 전에 페이지의 일부가 클라이언트로 플러시 될 가능성이 없으므로 훨씬 더 안전합니다.

+0

Daniel, 귀하의 의견에 감사드립니다. – davidj

0

cfide에서 클라이언트 변수를 올바르게 설정하고 Application.cfc 파일에서 클라이언트 변수가 활성화되어 있는지 확인하십시오.

관련 문제