>>2
Json is overkill, just store algebraic notation for each turn one per line. Then you can just have one parser that you use for both the UI and the save file.
>>1
I did this in C once. No you don't need JS, set the form submission URL to your "API" and when you get form data hold the socket open until the other player finishes their turn then send the updated chess board with a new form. Have them enter their moves in algebraic notation.