2016-06-24 3 views
0

Ich versuche, Json-Daten an eine URL zu posten, die ich nicht kontrollieren kann. Das API-Dokument besagt, dass nur JSON-Daten akzeptiert werden. Ich denke darüber nach, ob ich HTML-Formular verwenden kann, um es einfacher zu machen.kann ich nur json string (ohne "name =") mit formular?

Es gibt viele Beiträge hier in Bezug auf, wie "json Daten mit Hilfe von Form", keiner von ihnen gilt meine Situation. Das Problem ist, soweit ich weiß, dass, wenn Sie Daten über das Formular posten, die Post immer "Name = Wert" ist, die API jedoch nur "Wert". Das heißt, obwohl ich JSON.stringifyinput Werte zu einem JSON-String kann, muss ich es noch mit einem "Name" veröffentlichen, was die API nicht will. Also das ist meine Frage, kann ich Werte nur über Formular posten?

Update: die API document

Was es in der API sagt, ist mir sehr vage. Schlüsselinformationen sind: 1) Wenn Sie die Schnittstelle verwenden, verwenden Sie HTTPS-Protokoll und JSON-Datenpaket, das Datenpaket muss nicht verschlüsselt werden.

2) HTTPS-Request-Methode: POST https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN

Für access_token muss ich es bekommen einige Passwort und es läuft in 2 Stunden.

3) Wenn die Nachricht erfolgreich gesendet, gibt sie:

{ 
    "errcode": 0, 
    "errmsg": "ok", 
    "invaliduser": "UserID1", 
    "invalidparty":"PartyID1", 
    "invalidtag":"TagID1" 
} 
+0

Json ist Schlüsselpaar, was Sie suchen, ist offenbar Klartext –

+0

Sie sagen, ich brauche "Text/plain" für die Form enctype? – shenkwen

+0

Sie können eine JSON-Zeichenfolge nur als Zeichenfolge posten. Post benötigt kein Schlüssel = Wert-Paar im Post-Body. Wenn Sie jedoch etwas wie PHP auf dem Server verwenden, müssen Sie key = value verwenden, da der Schlüssel benötigt wird, um $ _POST mit dem Wert zu füllen. Sie können den Rohwert immer direkt aus der Eingabe lesen, z. '$ data = file_get_contents ('php: // input');'. Ein HTML-Formular selbst wird keinen Wert, der keinen Namen hat, übergeben, so dass Sie Javascript benötigen, um Ihren namenlosen Beitrag zu erstellen. –

Antwort

1

Nein, die Arbeit ermöglichen JSON formatted data to be directly generated from a form eingestellt worden.

Um die Anforderung machen Sie entweder müssen verwenden:

  • XMLHttpRequest an die API (die, dass für eine preflightpermission, einschließlich der Unterstützung erfordert, von der API gewährt wird)
  • XMLHttpRequest an einen Proxy
  • Server-Side-Code

Jede dieser ein HTML-Formular verwenden könnte, die Daten zu sammeln, bevor sie mit th zu erzeugen e Anfrage an die Drittanbieter-API.

+0

Ich habe tatsächlich versucht, mit $ .ajax, aber es gibt einen Cross-Domain-Fehler zurück, genau wie du gesagt hast. Ich brauche jedoch noch eine kleine Erklärung, wenn ich $ .ajax verwende, um die Daten zu senden, obwohl ich nicht sehen kann, was die URL wegen des Bereichsdomains zurückgibt, aber die URL erhält meine Postdaten, nicht wahr? – shenkwen

+1

Sie können die vollständige Anfrage über die Registerkarte "Netzwerk" in den Entwicklertools Ihres Browsers anzeigen.Da Sie die Daten als JSON formatiert haben, müssen Sie den Inhaltstyp auf einen Wert setzen, der nicht mit einem einfachen HTML-Formular generiert werden kann. Das löst eine Preflight-OPTIONS-Anfrage aus, um Erlaubnis zu fragen. Da der Dienst CORS nicht zum Erteilen der Berechtigung verwendet, wird er abgelehnt, sodass die POST-Anforderung niemals gesendet wird. – Quentin

Verwandte Themen