2017-12-21 4 views
0

Ich habe eine AngularJS 1.5-App mit einem Formular, das Daten an eine Datenbank sendet. Im Formular gibt es eine Dropdown-Auswahl. Das Problem ist, einige Optionen in der Dropdown-POST erfolgreich, während andere einen POST Fehler auftreten sagtPOST-Fehler 500 (Interner Serverfehler) - JSON-Syntaxfehler

POST http://localhost/myURL 500 (Internal Server Error) 

und darunter ...

SyntaxError: Unexpected end of JSON input 
    at JSON.parse (<anonymous>) 
    at Object.qc [as fromJson] (angular.js:1285) 
    at apiError (postFormCtrl.js:957) 
    at AjaxServices.js:37 
    at angular.js:11029 
    at angular.js:15616 
    at m.$eval (angular.js:16884) 
    at m.$digest (angular.js:16700) 
    at m.$apply (angular.js:16992) 
    at g (angular.js:11313) 

Was einige Elemente aus der gleichen Form verursachen könnte zu POST erfolgreich und andere diesen Fehler zu begegnen? Ich habe den Code auf fehlende Kommas, Klammern usw. überprüft.

ich die Ausgabe auf Browsern geprüft haben, haben die Response-Header für eine erfolgreiche Beiträge

Content-Type:application/json in den Antwort-Header während fehlgeschlagen POSTs

Content-Type:text/html in den Antwort-Header haben. Könnte das das Problem sein?

Und wenn es ist, wie verhindere ich es, weil ich keine einzige Einstellung in der Anwendung habe, die den Inhaltstyp als Text/HTML einstellt.

Zusätzlich weiß ich, dass das Problem nicht in der Ajax-Post-Funktion sein kann, da die gesamte Anwendung die gleiche Ajax-Post-Funktion verwendet und sie gut funktionieren.

MEHR INFO

Dies ist ein Beispiel für ein Element in der Dropdown auswählen:

   <div class="row" ng-if="isStudentActivity"> 
        <div class="col-sm-10"> 
         <label for="activity">Select an activity:</label> 
         <div> 
          <ui-select ng-model="theactivity.selected" theme="select2" class="form-control" name="activity" required> 
           <ui-select-match placeholder="Select or search an activity..."> 
           <span>{{$select.selected.activity}}</span> 
           </ui-select-match> 
           <ui-select-choices repeat="item in activities | filter: $select.search"> 
           <span ng-bind-html="item.activity | highlight: $select.search"></span> 
           </ui-select-choices> 
          </ui-select> 
          <p ng-show="dataFilterForm.activity.$invalid && (!dataFilterForm.activity.$pristine || dataFilterForm.$submitted)" class="help-block"><i class="fa fa-exclamation-triangle"></i> You must choose an activity.</p> 
         </div> 
        </div> 
       </div> 

Und dies ist die Ajax-Funktion von allen Stellen in der Anwendung verwendet

 this.AjaxPost2 = function (data, route, successFunction, errorFunction, extras) 
     { 
     $http({ 
      method: 'POST', 
      url: route, 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
      data: data 
     }).success(function (response, status, headers, config) { 
      successFunction(response, status, extras); 
     }).error(function (response) { 
      errorFunction(response); 
     }); 

    } 

Und die Funktion wird mit

aufgerufen
this.addCommunication = function (request, successFunction, errorFunction, params) { 
     ajaxService.AjaxPost2(request, path + "/addCommunication", successFunction, errorFunction, params); 
    }; 
+0

Was posten Sie? JSON-Objekt, String, noch etwas? – chrisv

+1

Sie sollten etwas Code zeigen, sonst können wir nur raten. –

+0

Sie haben einen Fehler in Ihrem Backend (PHP?) Überprüfen Sie, wie Sie Ihre Daten verarbeiten –

Antwort

0

Ich denke, der Fehler html wird nicht von Ihrem Code, sondern Host (wie IIS) generiert. Es könnte eine bessere Vorgehensweise sein, Ihre Fehlerantwort mit JSON-Daten zu erstellen. Wie auch immer, Sie können ok und Fehlerantwort separat in angularJs behandeln.

$http.post gibt ein Versprechen Objekt, das wie

$http.post(url, data) 
.then(function(response){ 
    //handle normal result data here 
}) 
.catch(function(response){ 
    //handle error case here 
}) 
+0

Es gibt bereits Erfolgs- und Fehlerreaktionen im Code. Ich habe die Frage bearbeitet, um etwas Code –

+0

@Clint_A einzuschließen, sehen Sie einfach Ihr Update, vielleicht können Sie überprüfen, ob Sie HTML als json in errorFunction analysieren – Simon

0

Sein verwendet werden kann, nicht vollständig abgeschlossen Frage. Sie müssen die Daten angeben, die Sie analysieren möchten, und ihre Antwort.

Sie erhalten 500 Fehler, es scheint, Sie erhalten Fehler vom Server. bedeutet dies, dass Ihr Back-End-Code Fehler macht.

Überprüfen Sie bitte auch Ihre Analyse DataType.

Ich denke, Sie müssen responseType zu "json" erwähnen.

this.AjaxPost2 = function (data, route, successFunction, errorFunction, extras) 
    { 
    $http({ 
     method: 'POST', 
     url: route, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
     data: data, 
     responseType: 'json', 
    }).success(function (response, status, headers, config) { 
     successFunction(response, status, extras); 
    }).error(function (response) { 
     errorFunction(response); 
    }); 

} 

Sie müssen angeben, welche Daten Sie analysieren.

Verwandte Themen