2017-09-22 6 views
0

Coldbox에서 처리기 메소드에 $ .ajax 호출을하는 페이지가 있습니다. 나는 이것을 여러 번했지만이 현재 프로젝트에서는 핸들러가 시작될 때 rc 스코프를 덤프하면 각 요청에 다른 곳에서 추가하는 일반적인 것들 이외에는 아무 것도 없다.데이터가 AJAX 호출에서 Coldbox 처리기로 변환되지 않습니다.

더 이상한 것은 실행 흐름을 방해하지 않으면 처리기에서 모델로 이동하고 쿼리를 통해 나가서 SUCCESS를 반환한다는 것입니다. 필요한 값이 없더라도 . 모델에서 인수 범위를 덤프하면 아무 것도 없습니다. 이것은 콜드 박스 버그 또는 잘못된 구성 또는 뭔가처럼 들리지만이 시점에서 나는 그것이 잘못된 것이라고 생각합니다. 내가 값이에 확인하기 위해 내 데이터 구조를 덤프 한

function deleteAgendaItem(agendaid, eventid) { 

var data = {}, 
    url = "<cfoutput>#event.buildLink('agenda.delete')#</cfoutput>"; 

data.eventid = eventid; 
data.agendaid = agendaid; 

var xhr = $.ajax({type: "post", data: data, url: url, async: false, dataType : "json", contentType: "application/json; charset=utf-8"}); 

return JSON.parse(xhr.responseText); 

} 

:

그래서, 먼저, 여기에 AJAX 호출합니다.

여기에 냉각 박스에서 핸들러의 : 물건 이상한 얻는 곳

<cffunction name="delete"> 
    <cfargument name="event"> 
    <cfargument name="rc"> 
    <cfargument name="prc"> 

    <cfscript> 
    param rc.agendaid = 0; 
    param rc.eventid = 0; 
    var modelObj = getModel('agenda'); 
    var data = modelObj.delete(agendaid=rc.agendaid, eventid=rc.eventid, clientid=rc.userInfo.currentClientID); 

    event.renderData(format="json", data=SerializeJSON(data)); 
    </cfscript> 

</cffunction> 

이다. rc를 덤프하면 prehandler에 추가 된 내 rc.userInfo. * 항목 이외의 항목이 없습니다 (사용자 쿠키의 내용입니다). 진정한 성공 앞서 말했듯이 나는 모든 것을 실행할 수 있도록 경우

<cffunction name="delete" output="false" access="public" returntype="struct"> 
    <cfargument name="agendaid" type="numeric" required="yes"> 
    <cfargument name="eventid" type="numeric" required="yes"> 
    <cfargument name="clientid" type="numeric" required="yes"> 

    <cfset var ret = StructNew()> 
    <cfset ret.success = true> 

    <cfquery datasource="#variables.dsn#"> 
     update agenda 
     set active = 0 
     where agendaid = <cfqueryparam value="#arguments.agendaid#" cfsqltype="cf_sql_integer"> 
     and eventid = <cfqueryparam value="#arguments.eventid#" cfsqltype="cf_sql_integer"> 
     and clientid = <cfqueryparam value="#arguments.clientid#" cfsqltype="cf_sql_integer"> 
    </cfquery> 

    <cfreturn ret> 

</cffunction> 

,이 모델을 통해에 전달하고 돌아갑니다 RET = :

완성도를 들어, 다음은 모델입니다. 오류는 발생하지 않습니다. 엄청 이상해. 그리고 논쟁을 버리면 아무 것도 없습니다.

나는 event.getHTTPContent()와 getHttpRequestData()를 모두 버렸고, 전송할 데이터가 너무 비었습니다.

Mac에서 CF2016을 실행 중이지만 Lucee를 실행하는 Windows 서버에서 동일한 코드를 실행했지만 동일한 문제가 발생합니다. 내 Coldbox 버전은 v4.3.0입니다.

언급 할 가치가있는 또 다른 한가지 ...이 프로젝트에서 다른 호출과 동일한 문제가 있습니다. 하나의 차이점이 있습니다 ... 전달되는 값 중 어느 것도 볼 수없는 동안 (그들은 공백 임) , 내가 모델을 통해 실행하게한다면, 그것은 잘 작동합니다. 나는 여전히 모델에서 그들을 덤프 할 수 없다. 기괴한 것 이상입니다. param에 값을 넣는 동안 모델에 인수 범위를 덤프 할 때 아무 것도 나타나지 않는 것은 이상합니다. ColdFusion에서 일을

이십일년 및 냉각 박스를하고 팔년 이것은 내가 본 이상한 일이 ...

그래서 ... 어쩌면 눈의 또 다른 세트는 도움이 될 것입니다. 내가 뭔가 잘못하고 있는거야? 나는해야합니다. 감사. :)

+2

브라우저의 F12 도구는 무엇을 표시합니까? 어떤 데이터가 서버에 게시됩니까? –

+0

이 문제는 매우 깊어졌습니다. 스택 오버플로의 범위조차도 벗어납니다. 솔루션을 찾으면 게시 할 것입니다. – RobG

+0

@ BernhardDöbler가 물었던 것을 에코하기 :'POST' 된 데이터로 보여지는 것은 무엇입니까? 동료가이 정확한 문제를 겪고 있었기 때문에 묻습니다. 기본적으로, 그는'data.eventid = $ ('# eventid') .val()하지만 아무 것도 게시되지 않았습니다. 그의 HTML에서 입력은'id = "eventid"가 아니라'name = "eventid"를 가졌으므로'data' 객체는 정의되지 않았고 아무 것도 제출되지 않았습니다. –

답변

0

Coldbox 4.x는 기본적으로 요청에서 JSON 페이로드 본문을 역 직렬화하지 않습니다. 즉, $.ajax 호출이 전송합니다. 다음 5.0 릴리스에서 변경되었습니다. 그 동안에는 인바운드 JSON 페이로드를 역 직렬화해야합니다. preHandler or aroundHandler method을 사용하는 것이 더 바람직합니다.

if(isJSON(event.getHTTPContent())){ 
    structAppend(rc, event.getHTTPContent(json=true), true); 
} 

다른 방법 (CommandBoxbox install [email protected]를 설치), 당신은 multipart/form-data를 사용하는 아약스 요청의 콘텐츠 유형을 변경할 수 있습니다 그 값은 당신이 기대하는 것처럼, 요청 수집을 채우거나 냉각 박스 (5)의 BE 자료를 개발한다

관련 문제