2017-08-28 3 views
0

Wenn ich eine API-Server haben dann die API Ajax Daten mit JSON-Format senden:

{"status":304,"message":"Cannot delete data where PK is empty or > 1"} 

, wie AngularJS $ http Post den Status und die Nachricht rufen Bootbox aufmerksam zu machen? hier meine AngularJS $ http Post

$http({ 
    method: "POST", 
    url: apiUrl('disable_assethw'), 
    data: { 
    id: id 
    }, 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded' 
    } 
}).then(function successCallback(response) { 
    if(response.status == 304) { 
    bootbox.alert("Something went error.." + response.data.message); 
    } else { 
    $scope.getAssetHW(); 
    } 
}, function errorCallback(response) { 
    bootbox.alert("Something went error.." + response.status); 
}); 

Dank für Beratung.

+0

Sie sagten, es ist json und hier erwähnen Sie '{'Content-Type': 'application/x-www-form-urlencoded'}' – harishr

+0

Es sei denn, Sie haben den Standard 'requestTransformer' geändert,' {id: id} 'ist sicherlich keine gültige Payload für eine' application/x-www-form-urlencoded' Anfrage – Phil

+0

Warte, ist das JSON am Anfang deiner Frage die Antwort-Payload vom Server? Wenn ja, willst du 'if (response.data.status == 304)' – Phil

Antwort

0

Verwenden Sie bei einer POST-Anfrage mit JavaScript-Objekten als Daten den AngularJS-Standardinhaltstyp (der automatisch auf application/json festgelegt wird). Die $http service codiert auch JavaScript-Objekte automatisch als JSON strings.

Nur Antwort mit Status im Bereich 200-299 werden vom Erfolgs-Handler verarbeitet. Der Status außerhalb des Bereichs wird durch die Ablehnung Handler verarbeitet:

$http({ 
    method: "POST", 
    url: apiUrl('disable_assethw'), 
    data: { 
    id: id 
    }, 
    headers: { 
    ̶'̶C̶o̶n̶t̶e̶n̶t̶-̶T̶y̶p̶e̶'̶:̶ ̶'̶a̶p̶p̶l̶i̶c̶a̶t̶i̶o̶n̶/̶x̶-̶w̶w̶w̶-̶f̶o̶r̶m̶-̶u̶r̶l̶e̶n̶c̶o̶d̶e̶d̶'̶ 
    } 
}).then(function successCallback(response) { 
    ̶i̶f̶(̶r̶e̶s̶p̶o̶n̶s̶e̶.̶s̶t̶a̶t̶u̶s̶ ̶=̶=̶ ̶3̶0̶4̶)̶ ̶{̶ 
    ̶b̶o̶o̶t̶b̶o̶x̶.̶a̶l̶e̶r̶t̶(̶"̶S̶o̶m̶e̶t̶h̶i̶n̶g̶ ̶w̶e̶n̶t̶ ̶e̶r̶r̶o̶r̶.̶.̶"̶ ̶+̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶.̶d̶a̶t̶a̶.̶m̶e̶s̶s̶a̶g̶e̶)̶;̶ 
    ̶}̶ ̶e̶l̶s̶e̶ ̶{̶ 
    $scope.getAssetHW(); 
    ̶}̶ 
}, function errorCallback(response) { 
    //HANDLE 304 status HERE 
    if(response.status == 304) { 
    bootbox.alert("Something went error.." + response.data.message); 
    } else { 
    bootbox.alert("Something went error.." + response.status); 
    }; 
}); 

Aus dem Text & Tabellen:

Ein Antwortstatuscode zwischen 200 und 299 ist ein Erfolgsstatus betrachtet und für den Erfolg Rückruf führt, genannt zu werden . Jeder Antwortstatuscode außerhalb dieses Bereichs wird als Fehlerstatus betrachtet und führt dazu, dass der Fehlerrückruf aufgerufen wird. Außerdem werden Statuscodes kleiner als -1 auf Null normalisiert. -1 bedeutet normalerweise, dass die Anfrage abgebrochen wurde.

— AngularJS $http Service API Reference

Hinweis: Ein Status von -1 in der Regel zeigt der Browser die Anforderung mit einem CORS problem abgelehnt, die same-origin policy verletzt.

0

sagte Sie es json Antwort ist und Sie verwendet: application/x-www-form-urlencoded, was falsch ist.

Die beste Praxis Rest/api Anruf zu handhaben ist:

erstellen 1 common/allgemeine Funktion, die in ganzer Anwendung zugänglich ist, die Ihren Beitrag api Anruf verwalten (api Antwort in dem Rückruf):

postAPICall(url, body, data) { 
    let headers = new Headers({'Content-Type': 'application/json'}); 
    this.http 
     .post(url, 
      body, { 
       headers: headers 
      }) 
     .map(
      response => response.json()) 
     .subscribe(
      response => { 
       data(response); 
      }, 
      err => data(this.handleError(err)); //handle error here 
     ); 
} 

Aufruf dieser Funktion, wo immer erforderlich (in der Komponente oder Dienst):

var yourJSONBody = { 
    "param-1": "", 
    "param-2": "", 
    //.... 
    } 
} 

this.myCommonService.postAPICall("localhost:8080/app/", yourJSONBody, data => { 
    if (data.status == "304") { 
     //do stuff 
     //this.msgs.push({severity: 'error', detail: data.message}); 
    } 
    else { 
     //do stuff 
    } 
}); 

Fehlerbehandlungsfunktion:

private handleError(error: any) { 
    let description = 'There was an error: ' + error.status; 
    let errors = { 
     errorcode: error.status, 
     errorstatus: error.statusText, 
     errordescription: description 
    }; 
    return errors; 
} 
+0

Schreib mir, wenn du Probleme oder Fehler hast oder etwas fehlt. –

+0

Ihre Antwort verwendet die Angular 2+ 'http' API. Die Frage ist für AngularJS [$ http Service] (https://docs.angularjs.org/api/ng/service/$http) – georgeawg