Grails: Ajax参数没有到达控制器
Grails: Ajax parameter is not reaching controller
我的GSP中有一个按钮,看起来像这样:
<button id = "select"
onclick = "${remoteFunction(controller: 'customer',
action: 'selectBatch',
params: '''batchID='' + selectedBatchID')}">
Select
</button>
一切都很好,'batchID'参数到达我的控制器很好,但我意识到我不想每次点击按钮时调用这个函数,只有在满足某些条件时才调用。因此,我像这样重新定义了我的按钮:
<button id = "select" >Select</button>
并将其绑定到如下的javascript函数:
$('#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
,这是Chrome调试器显示的内容:
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
所以我们可以看到,它不是空的,因为它打印值'35'在Chrome调试器,但为什么不是控制器看到这一点,特别是当它也被包含在由Ajax调用形成的URI ?
试着用这个替换你的$.ajax
:
$.ajax({
url: "${createLink(controller: 'customer', action: 'selectBatch')}",
type: 'POST',
data: {batchID: selectedBatchID}
});
将'/'改为'?":
${createLink(action:'selectBatch', controller:'customer')}/batchID=
${createLink(action:'selectBatch', controller:'customer')}?batchID=
如果使用的是grails 2.x。X你也可以写:
def selectBatch (Integer batchID) {
...
}
相关文章:
- 从控制器返回后Ajax启动事件激发
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- 通过rails中的Ajax在控制器B的每个视图中渲染控制器a的视图
- 当通过AJAX调用时,控制器操作不会执行
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- Javascript/jQuery压缩一个图像正确的评论帖子,并使用Ajax Laravel 5.2保存到控制器中
- 使用 JQUERY AJAX (Spring MVC) 从控制器中删除
- 调用控制器后Ajax抛出错误
- 从控制器返回到Ajax的数据混乱
- 使用AJAX POST从javascript到带有Strong参数的Rails4控制器
- 使用ajax在同一页面中获取控制器动作渲染
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- JQuery$.ajax()发布数据以调用我的控制器中的方法
- Ajax”;链接_;当点击非常快时发送多个请求控制器请求(Rails4)
- MVC5:通过 Ajax 发布 JSON 时未正确将数据传递到控制器
- 从填充了 AJAX 的下拉列表中获取控制器的操作方法中的值
- 如何在控制器代码点火器中从 ajax 获取数据
- 在 AJAX 调用的 zend 控制器操作中正确设置会话
- 将消息从控制器传递到视图中的 AJAX 脚本