``ctx`` is a **global** object, Since JavaScript passes objects by **reference** the ``ctx`` **inside** your success function is **not** a locally scoped variable. So after you initiated the Ajax call (its asynchronous!), your CSR code immediatly continues, and does all sort of things with the **global** ``ctx`` It might well be all CSR overrides AND PostRender have executed in the meantime. Then your success function deals with a **global** ``ctx`` that is not the same **state** as was passed to the lisPreRender function. Making your Ajax call synchronous with ``async:false`` is a solution because your code doesn't continue until the success function has run