2016-05-24 14 views
1

Ich bin in meiner angularjs App mit einem sehr seltsamen Fall konfrontiert. In einer Fabrik arbeitet der folgende Code korrekt:

$http.put(apiBase + 'delete?id='+orderId); 

, die zu einer api verbindet offenbar eine PUT Operation auszuführen (es wird „Löschen“ hier genannt, aber es aktualisiert eigentlich nur einen Flag im Datensatz).

Aber der gleiche Code, wenn auf diese Weise geschrieben, funktioniert nicht:

$http.put(apiBase + 'delete', { 
    params: { 
     id: orderId 
    } 
    } 
); 

Welche lustig ist, weil ich genau die gleiche Syntax in einigen anderen Fabriken bin mit ähnlichen APIs zu schlagen und sie funktionieren!

Antwort

1

Wenn $ http.put verwenden, können Sie nicht brauchen, um Ihre Daten in der Config-Objekt zu wickeln. Sie können das Datenobjekt übergeben direkt, und dann den dritten Parameter weglassen:

$http.put(apiBase + 'delete', { id: orderId }); 

Ihre andere Fabriken wahrscheinlich mit der Syntax in Ihrer Frage angegeben arbeiten, weil Sie $ http.get oder $ http.delete Anfragen machen.

Ich habe festgestellt, dass diese etwas andere API für die verschiedenen "Shortcut" -Methoden verwirrend genug ist, dass ich fast denke, dass es besser ist, sie ganz zu vermeiden. Sie können die Unterschiede von the documentation sehen, wo zwei Parameter erhalten und löschen:

get(url, [config]); 
delete(url, [config]); 

und die meisten anderen Verknüpfungsmethoden haben drei:

post(url, data, [config]); 
put(url, data, [config]); 

Beachten Sie, dass die [config] Objekt weiter oben definiert ist, auf die Dokumentationsseite, die, wo es ist definiert, dass "params" Eigenschaft:

params - {.} Objekt - Karte von Strings oder Gegenstände, die wird mit dem paramSerializer serialisiert und als GET Parameter angehängt.

2

Ich glaube, das liegt daran, das zweite Argument von $http.put() ist ein data Objekt, kein config Objekt. Sie übergeben ein Objekt config als zweiten Parameter.

Sie könnten versuchen:

$http.put(apiBase + 'delete', null, { 
    params: { 
     id: orderId 
    } 
    } 
); 

https://docs.angularjs.org/api/ng/service/ $ http #

setzen
+0

Obwohl dies funktioniert, dann ist es mehr idiomatische die Nutzlast eines PUT-Anforderung in der „Daten“ Eigenschaft enthalten (die in die Anforderungs Körper geht), anstatt die „params“ Eigenschaft des Objekts config (das erzeugt Abfrage-String-Parameter). Mir ist klar, dass Sie nur den Code verwenden, den der OP bereits verwendet hat. Das ist eher ein "FYI". – jadarnel27