{"id":683,"date":"2012-05-01T12:28:56","date_gmt":"2012-05-01T10:28:56","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=683"},"modified":"2012-05-01T12:28:56","modified_gmt":"2012-05-01T10:28:56","slug":"cancel-a-partial-refresh-via-ssjs","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=683","title":{"rendered":"Cancel a partial refresh via SSJS"},"content":{"rendered":"<p>After reading <a title=\"gbs.com: quick tip: conditional event handlers\" href=\"http:\/\/xmage.gbs.com\/blog.nsf\/d6plinks\/TTRY-8TT2Y5\" target=\"_blank\">Tim Tripcony&#8217;s blog post<\/a> , I thought about a way how to cancel a partial refresh via server side javascript. To bring this to life, there are just three things to do:<\/p>\n<ol>\n<li>Abort the processing of the request on the server<\/li>\n<li>Give feedback to the client that request is canceled<\/li>\n<li>Stop Dojo to process the XHR request<\/li>\n<\/ol>\n<p>To stop the processing of a request on the server and to send an empty response to the client, this SSJS code can be used:<\/p>\n<pre>var response = facesContext.getExternalContext().getResponse();\r\nresponse.reset();\r\nresponse.commitResponse();<\/pre>\n<p>The client will receive an empty HTTP response body:<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbYAAABLCAIAAACTEDVUAAAG6ElEQVR4nO2d244TRxCG+1l4Um55hLwALxCSiyQXKCRSwkYiSEjOWuLgKCG7CywLXlhLCXIuLKyZ7q7q6pnpaTf+PpWicbm6uvpQPyawxj0CAAABtwUAAAEkEgBABIkEABA5Ool0zjl3cKuOlnSAdQIMvpa7gc3danfn7v3QfjhZRkL7DPC7AOMUUy5YKGaeApSFR4ONCacpzjaXd8QT5r\/9mSxPMkP0GQYzv0TWVdX43Hfu3o+EBlKyDVpU8kt5LP5piVaoOyecOswcVeTSv04MQNqiqfKHWmbx6BmiDzCSo5PIT5\/+69u\/m82Hg5LIUC9cH2OkUqHuTG5COJFUoTSd99\/Qqa9OCtCxbI7+YJllAAMkUlLMcCCMRLp+oSd8uRVuqe7JutWT4zabm83mZrP5uLP1+vL85YupJDK6Nmm1yV2ITipVkgxLJonWM2ZqPUN0mfo+WIqUMG6O\/rB\/mZzOTvRz3xiJRB+nJXpjt\/J19QL0gdFUE96uAbibm7Xr89fqVJFIryWS\/R+2kNRRur+bR29vaWC01aPLCWuW0uoe\/Vkaa3EqyfXiszZHyr+NfeBNzmhB\/9+ISOQh0L0Akmfvj94ZS6rQWQt3ff1uvX57dfXq7eXF5Zuzs7+fr54+SX6KlJyDYyxjlb6NDtcTDni3GxNdlF6hMmn4ludMJkzOIq1UWlp0mZbyBqOoHr\/RPhz2J654lAB9YNhTYeaZcWcvn\/\/5bPFs+fjp6e9P\/3h0+uTh4vHPSGTW1HpyRT68qxPepGRC454oD8YdCMu2ZLNj+eMX\/rjmEOjeT8mjBOgDo0lGXq2RuNMnvz765buTB9+cPLh38uDewx+\/\/u2nb+0SuffvUZx6HnsqXS+MY6NleE59lOe0LF\/ajWiY4kwuXyo7WaT07NUcVhWGZXG7j+cMw\/QkXU\/0GQYT3p\/uW9IF2w\/04vWBXuaCq5LJ+HuRYCfrRJMyNNVEAJAL3VWEeSQSfQQoDQ0GACCCRAIAiLi3AAAg4C4BAEDAvQQAAAH3DwAACCCRYGK1Wi2Xy8UBs1wuV6tV7X2CLw131mfrHIZhh29nMAvuvE\/1g8cwzGLnMAvuok\/1g8cwzGIXMAvuVZ\/qB49hmMVewSwgkRjWpFXRiyPEve7jHcNrOHoWi0XtnwHLY7FY1N6zItCbVXBv+njH8AamY\/fFPLWryKZFiay9Z0WgN6vg\/wCidwyJH83pU+xHgNI1zJN85FyFSh1zCpYhikQav0932i9tS2ZbLBaWxe5fugBpZ\/R3S5PVmzAV\/tdYeMeQ+AFv59znmO7znBSd10s+cq5CpY45BUt8ixJpWazlpeSpctuzehOmoohEdn9B9t5NxoQXMXpNjXmk2a27I3dROIvFWbrI3AqjMR6SRO5GeZrlLTZ0RgcqwV5YNKCoREY3St+xQiCRVXBXfbxjuFLZXZTwOQzo3jA9RsmcdOox0dktC\/QYsHC7c3CRufMqxXsMkEglQJdIZbiULSqRykZ5SFsRPRRlJ2cgqzdhKty7Pt4xvFPxbpvi9wKSMdHn8H6HmS0xdqLJpVnsiypRZLQSZd7oAqMciESGwxWJzDpN6WVyJ60nNBFZvQlT4d738Y7hvcruoijO\/bMXmYyxJInWYImxIyUftvCshQwuUilm\/6xX4hGVSBcjS+NGDtcl0rJRyZdKhsGHNYas3oSpQCIzFmivRF9U0SKVYowL8VAkMnzZ9Ued4fDkszQXEgkz4NZ9vGNYq+wuiuTfE43UY\/Tn7qiu0z67EW+gvZIBzqmK9PzSpGGYlH+8RG47nxx1Wdz2P2NKmugFhBJp2ajkSyVDeHwzkNWbMBXuuo93DNdw9LT4V8dr71kR6M0quA99vGP4AEdPixJZe8+KQG9WwX3s4x3DRzh6WpTI2ntWBHqzCkgkJEAiDwR6swrupo93DDdw9LQokbX3rAj0ZhWc928kecdQ5h9igsaoLXp51N6tUtCbVQj+2kT\/GGrccACIQW\/WAIkEaAR6swZIJEAj0Js1QCIBGoHerAESCdAI9GYNkEiARqA3a4BEAjQCvVkDJBKgEejNGiCRAI1Ab9YAiQRoBHqzBkgkQCPQmzVAIgEagd6sARIJ0Aj0Zg2QSIBGoDdrgEQCNAK9WQMkEqAR6M0aJL5SF8Oww7Qq3y97hKQ+RWIYdpgGs4BEYlibBrOARGJYmwazgERiWJsGs+C+AgAAAfc9AAAIIJEAACJIJACASEGJvPWZclMAABQlIpG6rhmFD3EEgC8AXyKTCohEAsDxkPcpcv9WN+ZWH8\/pjQqHeMmlPAguAMzPZBKZDIim1RNKswAAzMN8Ehnm6eqmkoQPkgBQiwyJDAVr2AdAezyyCAB1+R9EVm6KhU5iUwAAAABJRU5ErkJggg==\" alt=\"\" \/><\/p>\n<p>A HTTP Header has to be added to the response to inform Dojo that the request was canceled. In this example it is &#8222;<em>X-Partial-Refresh-Cancel<\/em>&#8222;:<\/p>\n<pre>response.setHeader(\"X-Partial-Refresh-Cancel\", \"1\");<\/pre>\n<p>The header is now added to the HTTP response and sent back to the client:<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAApkAAAC9CAIAAAB3b\/EMAAASyUlEQVR4nO3d7Y4cRxXG8b7KvZ3wNTeSGyDhA8IiwiCF2FJAijTsWptgC0IMix1wwItNaD44HvXUealT1V3dXTP\/n0ZWT029nK4ZzzO93l0PL049fvx4jPnwo0+vv\/ztF5\/9\/NHDTx49\/PjRw48\/\/9VPH\/\/6Zx9+9Kna\/yeCbEw6W\/NYJcmprBWTVdQa0IVfnkoaZTd\/kmmLeow6H3zwwfHgnelD05YPJo4Dk\/7+wGTmxc8F72SfylE8ceozIvsnrwFEDNVZ\/otHNx9+9Km8\/eLRTdOKR\/sTQHZIpBEAgL7UZ3lfZGwT5ACA83ApWQ4AwLkiywEA6Nvw8tTt7e1LAADQD+W6\/AsAANAPvsYOAEDfyHIAAPpGlgMA0DeyvMAwDMMwbF1FSi1ph3XiklW\/IN8N5PUM+Fb6vW\/DqYr2QQgusSCrmHUKcE5c7RyccJniYmslT\/FSk1u\/A9hvyc6gHqPO+llO\/O+N8z5v9ZzzJCZjS9+u\/QKy5fkPBfehSH2WW793XW2XmziKLLHarXki7ctSK\/QbF1xazqy+Fhf5a7Asa4sWmVyGbqTFn0E9wBzVT\/fxlbPaimgheY9SW5zOFctZk8gJ\/ZbSR+Xq\/tj5J\/vj2DlZ\/sMP\/z29vb2\/\/9euslwG23Aq2NOp0G\/MboJcyKrQWi75Uzb6Z2d18EU2xz+IrFKqIsutaJcDMYf1wpMt8u5ovD79lqLXM9Yk3wSSp8l5qHSVbLvazS8gUp61ihy7yMmOM7P8\/v71\/f3r+\/t\/v7u9evXi+Td\/XCrL1b+K1l\/O7F9adVGrkmy37CRqPXOW9mdQT9Pfh0iRluDm+AfHu9nlgtQr6TlZTpAvSH2tjvYLNengD1SnWup1hWVN3zpk4\/Hu\/DcHdaz6jud384c477TOkOQtNDtbxKwsf\/361XDqT0+vnSyX56DmkNVfDgm2T+dRC5DDB0H2V09H1mxN67f4x9bYSKMzuV980eZY84+nQa6eVwX\/n7rJ8s1Nn3qr5diuvloiU8lG7Ir1BMl3NuuhurXiLZECIuXFZ17qRTsry7\/\/\/h+vXr387ru\/vXzx1xd\/\/\/bbP3\/99PbL7HW51VjdJzLWCRh1uD9hxaPTPupJ+RU6i8qHksbshNlVrDO1Tk09zUh5dZx45mvsO3F8rp0Wp4M\/UP5tkjNjc9nnOvLQIstlJ\/cLiJQXn3mRkx1nZvm333z97KvDVze\/v73+3e0fvrj+8vPD739Dlhct7U\/u5FzyTiff+LITBvfEOQjugCw7MltQ5HvZ+N63zU1fmVaL08EfqE4y50WFxalvmNajzkN1K\/rvRbJFHRt81L9b9EouMivLr7\/87Ref\/fzRw08ePfz40cOPP\/\/VTx\/\/+mfxLD+2HzmN\/jzxqay8KRqrlpE0+qOSxsjpW7uhdnMas6dvlZ0t0jpOapZVyW5xPzmVNMpu\/iTTFvUYdeQrZ\/qQ9dI6Dkz6+wOTmRueFcKcdwz5HMme1cv5q8tR1gytH53\/Wl3p58sRV\/Skqj2Dw3mnA4DzwO992511spwgB4CzQZYDANA3shwAgL4NL0\/d3t6+BAAA\/VCuy18AAIB+KFn+DQAA6IeS5X8BAAD9IMsX8\/Tp05ubm8Oe3NzcPH36dOuNAQC0pWT5tyj35MmTu7u7N2\/ebP3NjCfevHlzd3f35MmT58+fb71DAIBWlCx\/jkLPnj27u7vbOrhNd3d3z54923qTAACtKFn+VxS6vr5++\/bt1pFtevv27fX19dabBABoRcnyv6HQ4XDYOq8zDofD1psEAGiFLF8AWQ4A2JCS5Xco1EWWb71JAIBWlCz\/OwqtkOUz\/1uzw+Gw9SYBAFrZ7He4Jv85\/DqLqjXMn0fNcvV\/m68O4\/lZ7uxA3bMwc\/eCiy778qieLRl4vDsI1ir+owAwh5LlK\/0i+GEYhkEer2mpdbvI8uwOlO7GzN07hl\/TVZaaLRkYuWu1bPVqB3DGdpfl00uc5NFsH\/mOqb6fBuexVpdKs3y6StLBaXSGH48HI+9Ls1zug2xU+wQlk8j5rUqcg8jTV12zuhX+XWuj6nYMABxKln+3infvaPJYdpi+Ffp9nJmzjX4fdfUjJ8sTaqhbHwLUnk6jOtsxy+PPQmSvrGctqO6JU9sjZTtnUVRwQlZ1vOssPWffAEClZPk\/VpG8LTrtSYdsH\/VYvhHLmSN9VEXX5XIV6xJcPmoNT9ZSszz+LGQ3UHYrpW6vs64z0J\/KGl5dcPBu\/IwAYD4ly\/+5infvaE7j8Tjpme0TmUStIdJHVZHlTme1Z3y4leUzn4Xjsb+lEYPGWld9jmYOr645fteZoboGALCQ5WR5NMsjWxphbXvwics+187wxWu27jozVNcAABYly1+t4t07mtV+pPb0+\/jH01HTxvjq0pzvfVukMVlLzfLqZ8FqkbsXpE7yKvDEWQ9ly1ZPbZGarbvODMnTV1QGAKiULP8ehbr4vW9bbxIAoBUly\/+FQl1k+dabBABoRcnyf6NQF1m+9SYBAFohyxdAlgMANqRk+WsU6iLLt94kAEArSpbfuw7QbB3WGVtvDwCgISXL\/+M67D63AAC4KEqWv3GR5QAA7ApZDgBA35Qsf+siywEA2BUly\/\/rIssBANgVJct\/cJHlAADsClkOAEDflCz\/n4ssBwBgV5Qs9weQ5QAA7ApZDgBA38jyYldXV1dXV1tXAVR68ODB8U8A52H5LL96L9KtrNja2ZJHZy5NlmMnHrxXOmqsTfR2nwD4bAHMQZYvvBawjmn4FQXhPrMcwBwLZ\/kx56aBd3VKNqoDnc5JN7WDWpW8qw7MNsYLA1qQmSqz+XicXL4nWZ48JHsmo9SvBFjzRFqsap2edV+QAM7YelnudFDb\/amSELVSfDpKhrFVZPB0IoUBLcSz3Gpxsn88TVZ5N1uY8zWDSFWlZwSg7yyXw6d3g2vJ9JWN2di21gJaKMry5ELWyU71kjeSneoSznC\/qkj9fj3ApVkyy2W2lYbxzOF+YfKuOiq7XHw40EjddblsD+a03yd46ezPU1q\/XzNwaZbPcnk3GIRqt+BwshyXJpiX\/lezIxfQ1vzOwGwk+1XFpyLLgXc2y\/LjcTa\/pz2tDnK2SGHJzIs0kuVYjfx6+LRRfkH7eHc8jWe\/Z3IsV5SL+l8q99eK9xzJcuA9flcM0LdzzbNzPS+gBbIc6J56rdwp9YsNAHxkOQAAfSPLAQDo25JZfgAAAKvjuhwAgL6R5QAA9I0sBwCgb2Q5AAB9I8sBAOgbWQ4AQN\/I8v4MwzAMw9ZVAAD24kyyfDhVMbZ60RYlBdcl1AEA43lk+cxIa5rl1VVVr7uy\/VQCABfrnLNcXhar18qlLU43vyrrSj04sxyeHESGAADOz9lmuYzGSOOcgWoBavT6k1QUEB8SYc2ffCZI7sZ3BgCwLLJcz\/KKGHaGBEuqrjw+JLKZahnJgezvjAIANEWWe9fl8dkiVfWV5aOW035\/fzgAoBGynCxPy\/aP\/YAnywFgfeeQ5WPuH3TVSFN7WrMFB\/olZSdxWvwJIzOrRWY3M7i9fuUAgKbOJMvhqwvXdYYAAGYiy89Z3VVy9YU1V+QAsAmyHACAvpHlAAD0jSwHAKBvZPnZ4p+uAeBCXEqW1\/101nRs9aKLTxuckCwHgAtxEVk+M9UuLcvVTzx8jzoA7NZFZ7m8Ulcv30tbnG7ZqoIzq+3OXbUAa6\/ksdoIANiJy81ymZeRxjkDs1XVzVxUZ5yV32Q5AOwNWX5yHM\/IqYqBalV1M7fIclmY9RAAYHNk+clxaUbGZ4tU1a7OoixXa3AeBQBsiyw\/OSbL1W5kOQDs2UVk+Vj4TW3WsTrQCVc5sKik4MzWctbAio3yTwQAsK1LyfIzRsQCwIUjy3ulXj0DAC4QWQ4AQN\/IcgAA+kaWAwDQN7IcAIC+keU\/sn4WKz62etFgSXyPGwBARZaP4+wf62qU5TMn3yf5s+9zpmq37SuTvxggOZ7WXPQJjw+CwCUgy8fRfnMPvo2WtjjdsrXJ4dbkwfnlcsGeFcOT2uavXl3tatlWt\/PTpzj5U+1QNCeA80OWj+Mqvzw1MjBSW93kwTi3PhNMH5KVJAfq8OOQ5FgWmQyf3pVzWqtYxU+n9Xs6p2nNKYdbG2KdqXVe1omrp28NzHYG0C+yfBzbZHnyZl060KlNjQFrcnVOfyv8RnkcDAz1LJKHnNXV9IqclFpedvXsUxBfKFuhv7o6ifU6cdqDZQDoEVk+ji2vy+OzxWuTb9nVk6vLWTWoqRAJuWxPP\/mOp1O0nN\/HCk4rDtUZrNRMng5nrNUze5rqbsRPE8CZIcvHsbcs91csmlxdTh5b88hEiRwHF0oa1fRykjLbJ7i6NYM\/fM48sqe\/e3VzAjgnZPmPrEsltcU6VgfKZHUGWoX5jWrxTntwK6z9SWqwFk2GW0tYW6eeghylrm6dkVzRmVM2OrvhtKs9Vf6cFROWdgbQKbK8P9bb\/Vb1ZK1Z2573AQAaIcv7012WAwCaIssBAOgbWQ4AQN\/IcgAA+kaWAwDQN7J81+SPSGU7r1MYAGA\/yPJdm8ZzNqoXyfKiTw9LrSUb4wOXLTX4E95WnfFi4gs5w9WxRRuYvLrqhmePF3yCAKjI8l1L3gStN994S2TF5M9GkvOyHnKGTwOjXUnxOp2eMxfKTlI6XHaYX7x8OlZ7LQEgy3fNyXLZmA3+onUj88y55GqU5danmaJqrdqCdRZFaTbLrZqdVSKvmWB5wUetpyM7G4BFkOW7lo1nmVVJ56RPfF3rbjZ7Kpaoy\/Lkz6XqjJy7M9vMzwp1HzgqCqj4iOB0UJ+OeD0AZiLLd83KchnqTue6da27zoeJ6iWqs1w9liWpGZOdtqLO4D5kP160znKnczzLp\/s889kEMBNZvmtqZlvHK2R5sm7d5HL4UlnuBHxk2mys+nXGN8TP8ooPBEVj19z54JwAZiLLd8259lUfsu4W5bqz3PQgmV\/tXLpQsOBpB\/VYnTlej1WV37NotyOrTNsjdaqn6cyptvtlq8Otp8NZCMCyyHIsbJ\/v3TssCQCWQpZjYXtLTS4NAZw9shwAgL6R5QAA9I0sBwCgb2Q5AAB9I8s3UPTDS+rYRoUBAHpElm+gxzzusWYAuBBk+Qas3\/6RHKuX78mjo\/FLVZOZF0lishwA9oks34AMaT+t1cbSGRYpe6mpAAALIss3oEascwk+2lmuDrfyPl6bOoosB4B9Iss30C7LrbUWuUAnywFgn8jyDaiXvE5sq43BLI88Gi975gwAgBbI8g1YXwyfPqp2k49Gpp0f5GolAICdIMv3i+AEAESQ5ftFlgMAIshyAAD6RpYDANA3shwAgL6R5QAA9I0s3xg\/7gUAmIks39IO83vDTxUL\/jT8UiUBQBfI8i1ZueX\/ipjR+N0ykYHBqhbsVmRa9uKTA8C5Isu3pH6B3UriaTenjz8wWJVTamnlsn9waXW4vOt0G43NsToDQKfI8o3JUByE0Y0iK1+tgZGSnJbpcv7YbE\/1FPzhSaOMc\/WunEqdEwA6RZbvhZ++8SzPDoxUYh1YjfJReRyppFGWB+cEgE6R5XtRmuWyccMsV4dkwz6ytL8QWQ4AYzTLh4Ebt\/m3bJBbl+\/qVyASsj0ZaE0y9+8QAGyNLOe24g0A0ABZzm3FGwCgAbKc24o3AEADZDm3FW8AgAaqshwI4pUDAO2dZ5Yv9f3JM7\/VeT\/fJr1ZJb29cgCgR0tmufyBH6tPRUYm\/f3hi6w+P\/+CM1TvyeKVtFiYLAeA1rbJcr9PdvLqzkWrr5Pl66Rsu63OzkWWA0BrC3+NPXt9aaWpHHg8Pv457RAcG1zdmSRZzlnUKjK+If5OWrP5Pf1VLEWd\/YnIcgBobfl\/L\/djIxswahDKzpGx8dXVYycds\/2DJ+u0+ydVuihZDgBnrHmWqyk4bZHd1Phx7jpj61aXBcT7W6P8kqxtzNYjh2fPJaKosz8RWQ4ArW35NXa10Yof624w4Yomd6py+svTd2aYuSHOmWYnjCDLAaAjW37vmz+waZZHqq3I8khtzir+0mQ5AEC1iyw\/th+pPa1HI2PV1eOTOMUk\/a1RTprKqYrqKR3rU4upR5YDQHvn+btisBe8cgCgPbIcLfHKAYD2yHK0xCsHANojy9ESrxwAaI8sR0u8cgCgPbIcLfHKAYD2qrKcG7e6GwCgAbKc24o3AEADZDm3FW8AgAbIcm4r3gAADZDl3Fa8AQAaiGX5xOFwWKcyAAAQQZYDANC3LbP86r2lJlxBdwUDUw8ePDj+CeBsLJ\/lwYReLRSThWauS5ZjJx68VzpqrE30dp8A+GwBzESWz5oN2MQ0\/IqCcJ9ZDmCmhbP8GHXTzLs6lTQmo+SQZHJrHitinSzPrlK6tDwRYHEyU2U2H4+Ty\/cky5OHZM9klPqVAGueSItVrdOz7gsSwHn7P0Pv55bUdgQqAAAAAElFTkSuQmCC\" alt=\"\" \/><\/p>\n<p>The XHR response must be hijacked before it is processed by Dojo. To do this, a new XHR function has to be injected between the existing one. Here is a basic code snippet:<\/p>\n<pre>var xhrLoad = null; \/\/ placeholder for the original function\r\n\r\nif( !dojo._xhr )\r\n   dojo._xhr = dojo.xhr;\r\n\r\ndojo.xhr = function(){\r\n   var args = arguments[1];\r\n   xhrLoad = args[\"load\"]; \/\/ \"save\" the original load function\r\n                           \/\/ and overwrite with a new one\r\n\u00a0\u00a0 args[\"load\"] = function( a, ioArgs ){\r\n      \/\/ execute custom code\r\n      \/\/ call the original load function:\r\n\u00a0\u00a0    xhrLoad( a, ioArgs );\r\n   }\r\n\r\n   \/\/ do XHR request\r\n   dojo._xhr( arguments[0], arguments[1], arguments[2] );\r\n}<\/pre>\n<p>The load function of a Dojo XHR request has a parameter <em>ioArgs<\/em>. This parameter gives a handle to an object that allows to access the HTTP response headers, so the response can be identified as canceled:<\/p>\n<pre>var canceled = ioArgs.xhr &amp;&amp;\r\n   ioArgs.xhr.getResponseHeader(\"X-Partial-Refresh-Cancel\");\r\n\r\nif( canceled ){\r\n   XSP.allowSubmit();\r\n\u00a0\u00a0 return;\r\n}<\/pre>\n<p>If the HTTP header is set, the processing of the request can be stopped. After stopping the request, the XSP object is not allowed to fire the next event. To allow this again, the function <em>XSP.allowSubmit()<\/em> must be called.<\/p>\n<p>Here is a demonstration XPage with a button and a label. The partial refresh will never be processed, instead a &#8222;Canceled&#8220; message will occur.<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP0AAAB\/CAIAAACrL1N4AAAUDklEQVR4nO2d6W8bZ37HJ39FX\/R1gS5S74tisdkX28RAs2gLdNEESFIgRZuiW2C3zdUA3WTjxJLs+JQl2fIt+YhtWTclUaRES7IkSqIuihLNm5wZDofH3DMkJdmyaluK+mIkejQXhzpMWnw++MIYPvN7fs\/1nYcjShxDAc8sEFC5CfIuTLnnHPOz40BAB1LuOYd3Ycrnnva5p3Nuh6zmjhsNly+cPwcEdCB1o+Gy1dzhnnO45xw5t0ODAw8IIrmysgwEdCBFEMnBgQddHfe7Ou7fvX3D5ZxEwl4oLXDLS5mlxTQQ0IHU8lImLXCXL9ZdvljnfTTndk3NzYxBy8vZxawABHSAtbycPV9Xfb6u2ueedU6NOqdGoeWlzGKGBwI6wFpeyoi+9yzMzE6OzE6OQEuL6WyaU4pPojF7h+d2pevil84Lnzmvfh203qRgr2owEFApa2kxfb727Pnasx73zOzUyOzUCLS0KGTSrEyJKavvxjeU8+bzjO2n1ZGfVkeeZ2yU6+bU5c\/9tjvKeCCg4onLpLlshstmOPFYGbO0KNTVnKmrOeOen552DE87hqHFrJAWWKmwhy1o3\/lnvOVFsmHN9fMXzjdfON9cc\/38OXbpxeJg0FqzYLrCM5SsFhDQK1fO6HKlBU4auZgVas+drj132u2amp54OD3xEFrM8GmeySlmN2G2i+tLXc+CFc9m3xVN\/8L55trcnz+bffe56zdrZGP4wfk50xVpLSCgVy42I+TESbRZmObZXPBihq85d6rm3KmXvs+meYGjRbEp3H\/r2+cZ2+rsxxtfvLHxxRsvnG\/KDlYe\/v3a46Hh+j\/EQ\/O5ihAE5Y53L2k28XjH+XdZXatXpSkIgpRTt6\/NFXGwau6XOz4XnE3z56pPnas+tTA3OTk+NDk+BGUEjmcpUbGJXnL65jp6dHXk8OrIYaXvV8fffTr8q+eBP2KOa47mmlxFCIJyx8oS5Vl9KesWmmH31bVGBG1nZ73aD+Vdgj3vs3JC9q8tmbYMzVSfPXPo0KHammrR8bU11YcOHao+e0bgXpqeZ6mMwFWfPVl99uS80+EYG3SMDUIZgeVZUlSw4\/wS3rfmOvzC+Rfrrp+tuf7qp0d\/tjb\/12sLv1j3\/Or51F+uu372bOqXz6Z+ucLbu49\/kqsIQVDuWFmiPKsvZd1CM+y++t6O6BVIp8P71Fvl3GqV7LkEjhI4SuDpbIa\/fPni2++8XX+hrv5C3dvvvH358sVshhd4ejOGo3iWzAhs9ZkT1WdOuJyOCfvAhH0ASvMMxxCiPD9WrfB24dpbwrW3xG1+zfO2ePDM9ZF4IFx7a7nzFxsvFpr\/+I+5itJLXFaidZyLFAv1j1XTqpYoX+o0qlOimke1Y3nTakl\/0vIGG+ywVk+0mt7B3MqmRVmibFp\/JlU7I5XE\/XQ2w1+\/fvX99957\/733rl+\/ms2I9+1U7iLhGCLNM2dPnzh7+oRr1jExOjAxut33CzcrXqSnnwy9v9j5vujydd\/hTd8\/+kQ8eGz74On4Rxtrgftf\/1ZnJFqD1xqzkQD9VlQn1\/jayFIZeVlQf\/Kuvb5ddtzhvF3awYQUOrd5G83blkxS36d55saNxv\/+9LPf\/+G\/Ghqubd3Wy31\/+vQPp0\/\/MDc7MT76YHz0wTbfe9tql5Mj6+i3q7O\/3\/L934oHz33\/sXUBfPkC\/uxZerqt4uMdrOKONwMja8MptoqCfK\/TNy3fK5szaH2tDmjtczvusI7zlBOlM7eqg1XmUS0xMgMFmWTT0xwlcHT9hQsffvRxa1tbS0vLb\/\/pvbq6GoGjeYXvT508durkMef0mH243z7cv833iKM3Onxjnbyd873E7p\/kfL\/G3gyO3Rq7f05\/VfIOQ3VIqgHG10Y1oKDu5c2s1brWKhpZdZ1seedQv8MGJ7mgudXvdt5LTieh\/urktOVp6nxdzW\/+7h\/uNTVlM3w2w9+6fevXf\/NObc1ZnpX7\/uSJqpMnqman7KMP+0Yf9m3zPUslJus\/f8J51+n2TMs\/b3zxxhpRtXmjT1RtfPHG8tBna2TjixW08\/i\/xkILBc2jzrHBgFfge4OrbjCJwVXXyZZ3ioxPRaGt72BuDa5m3rp5fc8xm57OCOxSVsikOfGjm0yaW8oKuY9qOEYUkeaZE8crTxyvnJ20jw71jQ5t9z3HEOHRTn937fpqZNVdsdj5\/jpjWhk\/sjJ+ZJ1uX5n+5pnvh\/XViMt0bqy5Nu9Qpdue9FLOobPM+jmVG54yQN\/3OhVlmfWX1kgSnYMdVJcOSlZXxys6be14ivJOTt4Z0BmLcirkevnxDsXnPrrhqNxOz7FkLjjNM8ePHT1+7OjM5OjIkHVkyCr3PUunHvXe9HbVPhbQtccz63T7Onl7PdmwTt5eT4+sP6PnOs6O3j3N0inNDulKbySGLvQiaL97suf5S2fq9rf\/2h90Sk3PMUSaZ6oqv6+q\/H7aMTI8aBketMh9zzEES6d8Qy0Pzvyn33aTQWcf88hjHkknXJMtZ03H\/22i\/eKOTZ93SGXl+\/xbWol1uCQnnORUHE\/KwtI8U1nxXWXFd5MTI0MPeoce9Kr4nmMIlk6xZNw3Yhq5UWGr\/x9Lzae2i\/\/rtN4mE8huTA8EVBSleabi6JGKo0ccYw8H+3sG+3vUfQ8EdJCU5pmj33979Ptvx0cGbBaTzWICvgc6+ErzzHdH\/vTdkT+NDPVbutss3W3A90AHX2meOXLkmyNHvnk4YOnpbO7pbAa+Bzr4SvPMhx998OFHH5w6ceyrLz\/96stPIZZOAQGVm4DvgcpREEMljYgmE6kEhmMIhoZROJQThoZxDEklMJpMGEwFBFR0QQyZ0BeVwvEojMJBIoHxLJURWPFvgERlBJZnqFQCQ+EgHoWpFJ43IRBQ0QXRZFxLFIHjWASFAwydyqS5TaMrvrueK2foFAoHcAzWyQkEVAqCKAJXFZHEkEiASMYyAptJb35NXeuJDptf6U1zGYElkjEUDhLJmFZmIKCiC6JSuFJEAkPCfpYmMwKX5tk0zwoGJEZmBI6lSSQSqKysrAIAShKITMVkSiWicNjHMmRaYAWe4QuUwDNpgWUZAsdxlmX5\/QHH8Q0AYKdAZBKTikhE4bCPJpPi9xR5VUkf6qAWIH7rMSPwgiCsrq7+3z4AfA\/YDRCRiEoVhQMJHBE4imepra+rqIilSZbWPMsxJM+KT3pgs9ns6j4Qi8WKPXWA1xgolYjmlMCRcNDLsSTHUixDKkSwDMHQBE0Tjgn7zLSDpgmGIViGUAlmSY6leI5mGObJkydPtVniqKTD7P2xSnzw8ty1b8K2O0IC1any9OlTDMOKPXWA1xgoFUdzQiP+VALjRIvTMqVYOsVQKZpK9Vt7669cuXDpyujwEE2lFJFbYgiOIXmWSafTKxqQc0NaD14ODTZr1VpZWYlGo8WeOsBrDJTEEVGJGBz0u0XLMmRSKnpLFJnss\/ReaWi809zyY9P9C5cuUWSS3h4sFUsTHEPSNP3kyROldxP2Tv0HL3vMjY+XloDvAXsOlMBhURgajCJBlk7RVJImEzlRWyLJhNVivtLYeLe5pamt\/dbde2PjoySZoCTBclFJlk6xDJ3NZp9sJzlpMfLg5QVz4xM1UBQt9tQBXmOgRCwiCg554jGEoZI0GaeIbSKJOEnErZaeq42Nd1tamtva7zQ1jY\/bya1TOckq0mScoZIMRXAc91jCosAZf\/AyhYUeK0AQZNswIGiH44eg3VSXUlVVtfskpYD4Cbf05X43t6\/5VYHiWERUyO8mkjGKiJOpOJnCN5XEiSROJHGLuedqw417La2tnaaW9o7JSQeRihNbZ6V6WTeFk6k4RcQpMknTtNS1qdlB4w9enm6vL0HfK6uI6yf7\/Yh+Ei17KVMV2r0do2xL1rE975LWYPd1+FAcC4sKeF0UEacIPPcLLCIZI1IxIhmzmLuvNjQ2tba1mUwdXd1tJtOd5uZrjTfqr1w5f+lS3cWLNecv1F+61Hz\/DpGMEcltvwWjCJwmkyRJLksId10y\/uDlnh\/+fVkBDMPbhlEyvlce65DX94Um3D06vt+nPmgNdl+HD+HRkCjfozmKiBPJWCqJ5ZRMYCPDg5euXmtqaWk3mTq7e0xms8ls7uzpae\/qbu00tXR03m9rv9fScuvuvWvXryUTWCqBSTMQyRhNJlKp1JIE753jBT14eUlBJBLZNowtF+YeziE9JS1RvpQW6lSUlcjOyhZGuWlJT+VKlDvchobPjCTUidEJNtIl5QBV6xrJn3fUOiXKpvXnR7UzIlAMDYryup1EAkvEkDgGi8IxGMcQW7+18fat1s7Oju5uk9ncbbH0WK091r4eq7W712Iy93Z0d7d1dt5vbbve2IBjCL5VXVQihhBJTOZ7963Kgh68bND3Mo9u6G7k0gD9iqqpZC+r1Hyvv5bKl6pV9CMLtUuhXcrr+4L6oxOwA98rI\/O2leOl732PnAkcTeAIjsE4FtkSjMdgc2\/P\/dbWzp6ebovV3Ndv7usz9fS0d3a2trc3t7U2tTTfu990686P7R2teExaN4JjcAJHUgkslUotSvB31Bt\/8HJ75b8sKtix72Vbe0G+VxZqTatyv5GWaNVSLpXO3qljF519TitefyCqXTXeH614me9lfdYZhc6ItMYi9z2GBET5PXMYGkrEEDwaySkWjcSiERxDrNbe1o72HovFYrOZrVaXazaOR2XCY8hmvESJGBLHUYIgshKwmQHjD16eaL2QVRAOh7cNo\/BNulDf545VM2v5XrFM25ZHv5ZB1xpsVCuDkS5ppd1Bf7QGpTNY4yPSGYvS935RQZ8r6HcncATHwrFoSKJwLBrGY3Bfv6Wjy2S12Sw2W2tHh2PCLp6SKCQTjoUTOBJFYYqipK5NC7zxBy8no6HS8b1W5ry+LyggrxV0MqjmVPWQkWtVJ34H\/dEJMJLcSKP6nckBRWGfqEjQ7ZqdSOBILBrC0KBCoRgW6e+3mHq6rQ8Gem22u833x8ZGMDSEoarxQQwNxqKhBI6EQgGWZTPbgcd7jTx4eby1PqNGKBTaNozCf67V971ORVlm\/TXTeu+WRha0cyvf\/XVKVPujbEVWV1nLeOtajep0z4jvVYdgZCzKqRCB0IhXFBL2zE7ZcSwci4YxJBhFAgoFsWi4v9\/aZe6xPnjQZe5tuNEQRUNR9eAAhgTFNwoYhtMKBEHwWO\/oP3jZ3nROEARl3XQ6HQwGN0oGVYO+eva8GyUyrh2j0\/+XvkcjXr\/H6XZNxWPi3yxs9zH80vp9\/Zb2zo7W9rYHA\/1RJKjpezQYj8HBgI8gCFXvCoLgH+7UevDypOmalumB72Wtq25pe5J5z3O+SvR8j4Q9OUWC7nH7QBQJir5HYf92+VDYj8KBKBqy2x\/a7cNRNITCyjA\/CvujSABDQ7FoxOPxcBwnaMDzPM8ygbHe0ZvHbPVfWWs\/t136eq6\/iSYSPM9r1RIEIRAIvMoZBBwwICT0SCqfe2ZmcjSOhTEkgEZ8MiERLxrxIRG\/uM1LC2XCkEAcC3vcC6lUaj++Z+j3+4s9dYDXGAgOuWWamni4MDeFR0Mo7EMjXkSpsEd+IBEa8aKwD4+GAv5HoVBoP0wPfA\/YJRAcdMsUCSzYH\/YHvfM4GorCPjTsld4L6QsNe6OwD0dDAe+82+1mWZbbH3w+X7GnDvAaA0UCC0oFvXOD\/T1zMxMxNIhGfEjYC4c8cOiRrjxI2ItGfDE0ODczMdjfU1FRUQUAlCRQODCvqpDfZR+2TdgHkYgPQwJIRLT+pvsjQXck6M45Hg570IgXQwJIxDc+OmAfsYX8Lq3MQEBFFxT2u3Q04xjuM3c4p+1oxIchfnTrtkd0vHhjg8I+DPGjEZ9z2m7taZ9xDOvnBAIquqCQz6WvgMc5Nmwzm1qHB63zTkfQN4+EvFHYH4X9SMgb9M3POx3DA1azqXVs2Ob3OPMmBAIquqCQb86Igl6nc3p0ZMjSb+k0m1q6Opq6OprMppZ+S+fIkMU5PRr0Og2mAgIquqCg1wkEVG6CAp5ZIKByE1TsD5QAgCIA5f+Iv0gcPny42F0AHFigjY2Nor\/pKFVVVQV8D9g\/gO8B5QjwPaAcAb4HlCPA94ByBPgeUI4A3wPKkTy+h35Xb9ysBQXrxwPfA\/YV4HtAOQJ8DyhHduh76Hf1OcmCleX68cD3gFfPTnyv9LTU3KrlWvHA94CisAf7faH+Br4HFJ093u913gfyXifA94BXxivyfUFvJsD3gP0G3N8DypH8vte6RZGWyP4Fn+cAShzwdwqAcgT4HlCOAN8DyhHge0A5svnfkpUgwPeA\/QM6XMIUe3IAB5bSfX4OALB\/AN8DyhHge0A5AnwPKEeA7wHlCPA9oBwBvgeUI8D3gHIE+B5QjgDfA8oR4HtAOQJ8DyhHgO8B5QjwPaAcAb4HlCPA94ByBPgeUI4A3wPKkU3fQ5DmBQBtYbxQWr6D6nvVOrQd5bhUB6uaULU5ZV3VhgAlCLSxtWDqp7f7QKdwQ8MKBqvvslC1df2O5S3UT6hzGQDrlz6b62dkqfQ3SCPbp05k3pzGC430fDe+zztjwPelj1EvasWo3lSoVpF51MibTEG+N34\/o2pcZWGh15LBioBSwOh+WdDuKDtWRmrt06r3D8avJa2cyp5rhan2XPWKynvRAkqZPdvvVQsL9ejeVtd\/ubPkec8C378WHHDfa71NybZwrUJlcuNNA0qZPGts3HklWKgzLq1Tu9nvgelfIzTvs6XHqne3r0uhyqC1T6kO3EhmnUhACQJWCFCOAN8DyhHge0A5AnwPKEeA7wHlCPA9oBwBvgeUI8D3gHIE+B5QjgDfA8oR4HtAOQJ8DyhH\/h\/aGSwnjAMPQgAAAABJRU5ErkJggg==\" alt=\"\" \/><\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n   &lt;xp:button value=\"Label\" id=\"button1\"&gt;\r\n      &lt;xp:eventHandler event=\"onclick\" submit=\"true\"\r\n         refreshMode=\"partial\" refreshId=\"label1\"&gt;\r\n      &lt;\/xp:eventHandler&gt;\r\n   &lt;\/xp:button&gt;\r\n   &lt;xp:br\/&gt;&lt;xp:br\/&gt;\r\n   &lt;xp:label id=\"label1\"&gt;\r\n      &lt;xp:this.value&gt;\r\n      &lt;![CDATA[#{javascript:\r\n      var response = facesContext.getExternalContext().getResponse();\r\n     \u00a0var ajax = new com.ibm.xsp.ajax.AjaxUtil();\r\n      if( ajax.isAjaxPartialRefresh(facesContext) == true){\r\n         response.setHeader(\"X-Partial-Refresh-Cancel\", \"1\");\r\n         response.reset();\r\n         response.commitResponse();\r\n         return;\r\n      }\r\n      java.lang.System.currentTimeMillis();}]]&gt;\r\n      &lt;\/xp:this.value&gt;\r\n   &lt;\/xp:label&gt;\r\n   &lt;xp:br\/&gt;\r\n   &lt;xp:br\/&gt;\r\n   &lt;xp:scriptBlock id=\"scriptBlockXHRHandler\"&gt;\r\n   &lt;xp:this.value&gt;&lt;![CDATA[\r\n      var xhrLoad = null;\r\n      dojo.addOnLoad( function(){\r\n         if( !dojo._xhr )\r\n            dojo._xhr = dojo.xhr;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0dojo.xhr = function(){\r\n           try{\r\n              var args = arguments[1];\r\n              xhrLoad = args[\"load\"];\r\n              args[\"load\"] = function( a, ioArgs ){\r\n    \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0    var canceled = ioArgs.xhr &amp;&amp;\r\n                    ioArgs.xhr.getResponseHeader(\"X-Partial-Refresh-Cancel\");\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( canceled ){\r\n                    alert(\"Canceled!\");\r\n                    XSP.allowSubmit();\r\n                    return;\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n                 xhrLoad( a, ioArgs );\r\n               }\r\n            }catch(e){}\r\n            dojo._xhr( arguments[0], arguments[1], arguments[2] );\r\n\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n      });]]&gt;\r\n      &lt;\/xp:this.value&gt;\r\n   &lt;\/xp:scriptBlock&gt;\r\n&lt;\/xp:view&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>After reading Tim Tripcony&#8217;s blog post , I thought about a way how to cancel a partial refresh via server side javascript. To bring this to life, there are just three things to do: Abort the processing of the request &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=683\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,75,9,27,82,76,81,74,24],"tags":[33,8,7,77,11,4,25,87,16,5,32,12,3,85],"class_list":["post-683","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-dojo","category-javascript","category-performance","category-server","category-ssjs","category-web","category-xpages","category-xsp","tag-8-5-3","tag-dojo","tag-domino","tag-html","tag-http","tag-js","tag-partial-refresh","tag-performance","tag-server","tag-ssjs","tag-tipp","tag-web","tag-xpages","tag-xsp"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=683"}],"version-history":[{"count":9,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/683\/revisions"}],"predecessor-version":[{"id":692,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/683\/revisions\/692"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}