Angular: Empty Fiddle

http://angularjs.org/

HTML

<script src="http://code.angularjs.org/angular-1.0.1.js"></script>
<div ng-controller="MyCtrl">
  <form name="myForm" onsubmit="return false;">
      <div>
          <input type="text" placeholder="First name" name="firstName" ng-model="firstName" required="true" />
          <span ng-show="myForm.firstName.$dirty && myForm.firstName.$error.required">You must enter a value here</span>
          <span ng-show="myForm.firstName.$error.serverMessage">{{myForm.firstName.$error.serverMessage}}</span>
      </div>
      <div>
          <input type="text" placeholder="Last name" name="lastName" ng-model="lastName"/>
          <span ng-show="myForm.lastName.$error.serverMessage">{{myForm.lastName.$error.serverMessage}}</span>
      </div>
      <button ng-click="submit()">Submit</button>
  </form>
</div>

JavaScript

var myApp = angular.module('myApp',[]);

function MyCtrl($scope, $parse) {
    var pretendThisIsOnTheServerAndCalledViaAjax = function(){
        var fieldState = {firstName: 'VALID', lastName: 'VALID'};
        var allowedNames = ['Bob', 'Jill', 'Murray', 'Sally'];
        
        if (allowedNames.indexOf($scope.firstName) == -1) fieldState.firstName = 'Allowed values are: ' + allowedNames.join(',');
        if ($scope.lastName == $scope.firstName) fieldState.lastName = 'Your last name must be different from your first name';
        
        return fieldState;
    };
    $scope.submit = function(){
        var serverResponse = pretendThisIsOnTheServerAndCalledViaAjax();
        console.log($scope)
        for (var fieldName in serverResponse) {
            var message = serverResponse[fieldName];
            var serverMessage = $parse('myForm.'+fieldName+'.$error.serverMessage');
            
            if (message == 'VALID') {
                $scope.myForm.$setValidity(fieldName, true, $scope.myForm);
                serverMessage.assign($scope, undefined);
            }
            else {
                $scope.myForm.$setValidity(fieldName, false, $scope.myForm);
                serverMessage.assign($scope, serverResponse[fieldName]);
            }
        }
    };
}