``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