2014-06-10 3 views
0

에 도달하지 않습니다 나는이처럼 보였다 내 GSP에있는 버튼을했다 :Grails의 : 아약스 매개 변수 컨트롤러

<button id = "select" 
    onclick = "${remoteFunction(controller: 'customer', 
           action: 'selectBatch', 
           params: '\'batchID=\' + selectedBatchID')}"> 
Select 
</button> 

모두 잘했다을하고 '일괄 ID'매개 변수 내 컨트롤러가 잘 도달했다, 그러나 나는 것을 깨달았다 나는 버튼이 클릭 될 때마다 어떤 조건이 충족되었을 때만이 함수를 호출하고 싶지 않았다. 그래서,이 같은 내 버튼을 다시 정의 :

<button id = "select" >Select</button> 

와 같은 자바 스크립트 함수에 경계 :

$('#select').click(function() { 
    if (selectedBatchID == undefined) { 
     $("#errorMessages p").text("Click a row to choose a batch first."); 
     $("#errorMessages p").show(); 
     $("#errorMessages p").fadeOut(3000); 
    } 
    else { 
     validBatchID = selectedBatchID; 
     $("#choosebatch h2").text("Batch ID " + selectedBatchID + ": " + selectedBatchDesc); 
     $('#AdminConsole p').css("font-size", "30px"); 
     $("#AdminConsole p").html("Batch ID " + selectedBatchID + "<br />" + selectedBatchDesc); 
     console.log(selectedBatchID); 
     $.ajax({ 
       type: 'POST', 
       url: "${createLink(action:'selectBatch', controller:'customer')}/batchID=" + selectedBatchID 
     }); 
    } 
}); 

이제이 변수는 다음과 같이 인 내 컨트롤러의 기능을 도달하지 않는 것 같습니다 :

def selectBatch = { 
    println "Batch ID: " + params.batchID 
    selectedBatch = Batch.findWhere(id: params.batchID.toInteger()) 
    println "Batch selected: " + selectedBatch 
} 

내 컨트롤러는 불평 때문에 :

............Batch ID: null 
Error | 
2014-06-10 16:27:54,686 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver -   NullPointerException occurred when processing request: [POST] /FatcaOne_0/customer/selectBatch /batchID=35 
Cannot invoke method toInteger() on null object. Stacktrace follows: 
Message: Cannot invoke method toInteger() on null object 

이는 크롬 디버거를 보여줍니다 무엇인가가 크롬 디버거의 값 '35'을 출력하지만, 왜 컨트롤러가 표시되지 않기 때문에

35 VM725:78 
POST http://hostname/FatcaOne_0/customer/selectBatch/batchID=35 500 (Internal Server  Error) jquery.tools.min.js:38 
send jquery.tools.min.js:38 
f.extend.ajax jquery.tools.min.js:38 
(anonymous function) VM725:79 
f.event.dispatch jquery.tools.min.js:37 
h.handle.i 

그래서 우리가 null가 아닌 것을 알 수 있습니다 이것은 특히 Ajax 호출에 의해 형성된 URI에도 포함될 때 특히 그렇습니까?

답변

1

시도를 $.ajax을 다음으로 바꿉니다.

$.ajax({ 
    url: "${createLink(controller: 'customer', action: 'selectBatch')}", 
    type: 'POST', 
    data: {batchID: selectedBatchID} 
});  
+0

이것이 효과적입니다. 왜 이것이 효과가 있었는지 조금 설명해 주시면 감사하겠습니다. 도와 줘서 고마워. –

+1

@AnonymousHuman HTTP POST 요청을 보낼 때 요청 매개 변수를 URL에 추가하지 않고 요청 본문에 전달합니다. '$ .ajax'를 사용할 때 이것을하는 방법은 그것들을'data' 속성의 값으로 전달하는 것입니다 –

1

변화 '/'에 '?': 당신이 Grails에의 2.XX로 작업하는 경우

${createLink(action:'selectBatch', controller:'customer')}/batchID= 

${createLink(action:'selectBatch', controller:'customer')}?batchID= 

에 당신은 또한 다음과 같이 작성할 수있다 :

def selectBatch (Integer batchID) { 
    ... 
} 
+0

나는 이것을 시도했지만 같은 결과를 얻었다. 귀하의 제안에 감사드립니다. 나는 그것이 다른 접근법일지도 모르지만 나는 Grails가 '/'와 '?'의 차이점을 이해하기에는 여전히 너무 새로운 것이라고 생각한다. –

+0

println 매개 변수를 추가하여 가지고있는 것을 확인하십시오 – user3718614

관련 문제