ホームページ >バックエンド開発 >PHPチュートリアル >PHP は ajax データを使用して投稿を送信し、投稿の一般的な方法の概要、ajaxpost_PHP チュートリアル
この記事の例では、PHP を使用して投稿を送信する一般的な方法と、Ajax データを使用した投稿を説明します。参考のためにみんなで共有してください。具体的な方法は以下の通りです
多くの場合、ajax を使用すると問題はありませんが、不完全な ajax データ送信ポストの問題が発生することがあります。これは、誰もが分析できる例です。
以下は標準的な ajax リクエストコードです。通常は問題ありませんが、たとえば username=fdas&321 の場合や、N 以降のパラメータ値に & 記号が含まれる場合には問題が発生する可能性があります。何度かテストしてみると、データは送信できましたが、印刷されたデータは半分にカットされていました。最終的にヘッダー情報を注意深く観察したところ、問題は js にあることがわかりました。文字列のスプライシング方法によりこの問題が発生します。 username=fdas&321&password =password が間違っています。したがって、問題を回避するには、送信されるデータを {username:username,passsword:password} の json 形式に変更する必要があります。
サンプルコードは次のとおりです:
① application/x-www-form-urlencoded
これは、POST 経由でデータを送信する最も一般的な方法です。ブラウザーのネイティブ フォームの場合、enctype 属性が設定されていない場合、データは最終的に application/x-www-form-urlencoded モードで送信されます。リクエストは次のようなものです (この記事では無関係なリクエスト ヘッダーは省略しています):
Ajax を使用してデータを送信するときも、この方法を使用することがよくあります。たとえば、JQuery や QWrap の Ajax では、Content-Type のデフォルト値は「application/x-www-form-urlencoded;charset=utf-8」です。
② multipart/form-data
これは、POST データを送信するもう 1 つの一般的な方法です。フォームを使用してファイルをアップロードする場合、フォームの enctyped はこの値と等しくなければなりません。リクエストの例を直接見てみましょう:
この例はもう少し複雑です。まず、テキストの内容との重複を避けるために、異なるフィールドを区切るために境界が生成されます。境界は非常に長く複雑です。次に、Content-Type は、データが mutipart/form-data でエンコードされていることと、このリクエストの境界コンテンツが何であるかを指定します。メッセージ本文は、フィールドの数に応じて同様の構造を持つ複数の部分に分割されます。各部分は --boundary で始まり、その後に内容の説明情報、改行、最後にフィールドの特定の内容 (テキストまたはバイナリ) が続きます。 。ファイルを転送する場合は、ファイル名とファイル タイプの情報も含める必要があります。メッセージ本文は --boundary-- フラグで終わります。 mutipart/form-data の詳細な定義については、rfc1867 を参照してください。
この方法は一般にファイルをアップロードするために使用され、主要なサーバー言語でもこの方法が適切にサポートされています。
上記の POST データの 2 つのメソッドはブラウザーでネイティブにサポートされており、現段階ではネイティブ フォームはこれら 2 つのメソッドのみをサポートしています。しかし、ますます多くの Web サイト、特に WebApp がデータのやり取りに Ajax を使用するようになっているため、新しいデータ送信メソッドを完全に定義して開発の利便性を高めることができます。
③ アプリケーション/json
application/json この Content-Type は、応答ヘッダーとして誰もがよく知っています。実際、現在では、メッセージ本文がシリアル化された JSON 文字列であることをサーバーに伝えるリクエスト ヘッダーとして使用する人が増えています。 JSON 仕様の普及により、IE の下位バージョンを除くすべての主要なブラウザは、JSON.stringify をネイティブでサポートしているため、JSON を処理する機能も備えています。そのため、JSON を使用する際に問題は発生しません。
JSON 形式は、キーと値のペアよりもはるかに複雑な構造化データをサポートしていることも便利です。数年前にプロジェクトに取り組んでいたとき、提出する必要のあるデータは非常に深いレベルにあり、データを JSON にシリアル化して提出したことを思い出します。ただし、その時は JSON 文字列を val として使用し、それをキーと値のペアに配置し、x-www-form-urlencoded モードで送信しました。
Google の AngularJS の Ajax 関数は、デフォルトで JSON 文字列を送信します。たとえば、次のコード:
もちろん、データを送信するために x-www-form-urlencoded を使用するように AngularJS を構成することもできます。
④ text/xml
XML-RPC (XML リモート プロシージャ コール) については前に説明しました。トランスポートプロトコルとしてHTTP、エンコード方式としてXMLを使用するリモート呼び出し仕様です。典型的な XML-RPC リクエストは次のようになります: