文本表单和图片一起进行ajax提交,表单是值,图片是对象,发送时有些问题
代码如下:
<code> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="csrf-token" content="{{ csrf_token() }}"> <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.bootcss.com/tether/1.1.1/css/tether.min.css" rel="stylesheet"> <div class="container"> <fieldset class="form-group"> <label for="title">标题</label> <input type="text" class="form-control" id="title" placeholder=""> </fieldset> <fieldset class="form-group"> <label for="content">内容</label> <textarea class="form-control" id="content" rows="3"></textarea> </fieldset> <fieldset class="form-group"> <label for="photo">图片</label> <input type="file" name="file" accept="image/*" class="form-control-file" id="photo"> <img src="/static/imghw/default1.png" data-src="https://cdn.bootcss.com/jquery/2.1.4/jquery.min.js" class="lazy" id="preview" alt="文本表单和图片一起进行ajax提交,表单是值,图片是对象,发送时有些问题" > </fieldset> <a id="submit" class="btn btn-primary">submit</a> </div> <script></script> <script src="https://cdn.bootcss.com/tether/1.1.1/js/tether.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script> // 用到了localResizeIMG插件,压缩图片: https://github.com/think2011/localResizeIMG <script src="js/dist/lrz.all.bundle.js"></script> <script> $(function () { var $preview = $('#preview'); var formData = null; //压缩图片 $('#photo').on('change', function () { lrz(this.files[0], { width: 800 }).then(function (rst) { //图片预览 $preview.attr('src', rst.base64); //根据需要增加一些信息 rst.formData.append('fileLen', rst.fileLen); //压缩后的图片暂存在变量formData中 formData = rst.formData; }); }); //ajax请求 $("#submit").click(function () { //设置TOKEN $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ type: "POST", url: "{{ url('article/') }}", dataType: 'json', processData: false, contentType: false, cache: false, data: { title: $("#title").val(), content: $("#content").val(), photo: formData } }).done(function (data) { alert(JSON.stringify(data)); }).fail(function (jqXHR, textStatus) { console.log(jqXHR); console.log(textStatus); }); }); }); </script> </code>
示例中,有两个文本表单,另外还有一张图片,一起提交到后台,
因为普通提交不能压缩图片,所以用js在前端压缩后,用ajax一起提交到后台,
提交过程中问题如下:
主要跟这两项相关:
<code>processData: false, contentType: false,</code>
1、如果让这两项生效,Request payload显示为:[object Object]
,ajax请求能成功发送,但jquery拿不到表单的值。
2、如果注释掉这两项,谷歌浏览器控制台报错:Uncaught TypeError: Illegal invocation
,ajax请求不能发送。
不知怎么弄
回复内容:
代码如下:
<code> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="csrf-token" content="{{ csrf_token() }}"> <link href="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.bootcss.com/tether/1.1.1/css/tether.min.css" rel="stylesheet"> <div class="container"> <fieldset class="form-group"> <label for="title">标题</label> <input type="text" class="form-control" id="title" placeholder=""> </fieldset> <fieldset class="form-group"> <label for="content">内容</label> <textarea class="form-control" id="content" rows="3"></textarea> </fieldset> <fieldset class="form-group"> <label for="photo">图片</label> <input type="file" name="file" accept="image/*" class="form-control-file" id="photo"> <img src="/static/imghw/default1.png" data-src="https://cdn.bootcss.com/jquery/2.1.4/jquery.min.js" class="lazy" id="preview" alt="文本表单和图片一起进行ajax提交,表单是值,图片是对象,发送时有些问题" > </fieldset> <a id="submit" class="btn btn-primary">submit</a> </div> <script></script> <script src="https://cdn.bootcss.com/tether/1.1.1/js/tether.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script> // 用到了localResizeIMG插件,压缩图片: https://github.com/think2011/localResizeIMG <script src="js/dist/lrz.all.bundle.js"></script> <script> $(function () { var $preview = $('#preview'); var formData = null; //压缩图片 $('#photo').on('change', function () { lrz(this.files[0], { width: 800 }).then(function (rst) { //图片预览 $preview.attr('src', rst.base64); //根据需要增加一些信息 rst.formData.append('fileLen', rst.fileLen); //压缩后的图片暂存在变量formData中 formData = rst.formData; }); }); //ajax请求 $("#submit").click(function () { //设置TOKEN $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ type: "POST", url: "{{ url('article/') }}", dataType: 'json', processData: false, contentType: false, cache: false, data: { title: $("#title").val(), content: $("#content").val(), photo: formData } }).done(function (data) { alert(JSON.stringify(data)); }).fail(function (jqXHR, textStatus) { console.log(jqXHR); console.log(textStatus); }); }); }); </script> </code>
示例中,有两个文本表单,另外还有一张图片,一起提交到后台,
因为普通提交不能压缩图片,所以用js在前端压缩后,用ajax一起提交到后台,
提交过程中问题如下:
主要跟这两项相关:
<code>processData: false, contentType: false,</code>
1、如果让这两项生效,Request payload显示为:[object Object]
,ajax请求能成功发送,但jquery拿不到表单的值。
2、如果注释掉这两项,谷歌浏览器控制台报错:Uncaught TypeError: Illegal invocation
,ajax请求不能发送。
不知怎么弄
看了以下,这个插件是利用了FormData
对象来发送文件的,所以你用jQuery.ajax()
发送的数据的data
属性必须是FormData
对象,不能把FormData
对象再作为data
属性的子属性。
<code>$.ajax({ type: "POST", url: "{{ url('article/') }}", dataType: 'json', processData: false, contentType: false, cache: false, data: { title: $("#title").val(), content: $("#content").val(), photo: formData //这里错了,不能把FormData对象作为data属性的子属性 } }) </code>
应该是这样才对:
<code>$.ajax({ type: "POST", url: "{{ url('article/') }}", dataType: 'json', processData: false, contentType: false, cache: false, data: formData //直接把formData对象作为data属性的值发送 }) </code>
如果你要附加字段,可以用FormData
对象的append
方法:
<code>//这段代码要在ajax请求之前 formData.append('title', $("#title").val()); formData.append('content',$("#content").val()); </code>
如果你要想把图片文件的字段名设置成photo
,在localResizeIMG参数文档力其实已经说明了,就是在你压缩图片的代码那里这样修改:
<code>lrz(this.files[0], { width: 800, fieldName: 'photo' //把上传图片文件的字段设置为photo }) </code>
另外要注意,FormData
对象在IE上只有版本10以上才支持,其他现代浏览器(Firefox、Chrome、Safari、MS Edge等)都没问题。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

Laravelは、ユーザーモデル(Eloquentモデル)の定義、ログインフォームの作成(ブレードテンプレートエンジン)、ログインコントローラーの作成(認証\ログインコントローラーの継承)、ログイン要求の検証(Auth ::試行)の検証など、ユーザーログイン機能を実装するための包括的なAuthフレームワークを提供します。ヘッダー。さらに、AUTHフレームワークは、パスワードのリセット、電子メールの登録と検証などの機能も提供します。詳細については、Laravelのドキュメントを参照してください:https://laravel.com/doc

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

Laravelフレームワークを学びたいが、資源や経済的圧力に苦しんでいないのですか?この記事では、Laravelの無料学習を提供し、オンラインプラットフォーム、ドキュメント、コミュニティフォーラムなどのリソースを使用して、PHP開発の旅から習得するための堅実な基盤を築く方法を教えてくれます。

Laravelフレームワークには、開発者のさまざまなニーズを満たすためにバージョン番号を簡単に表示するための組み込みの方法があります。この記事では、Composer Command Lineツールの使用、.ENVファイルへのアクセス、PHPコードを介したバージョン情報の取得など、これらの方法について説明します。これらの方法は、Laravelアプリケーションのバージョン化の維持と管理に不可欠です。

初心者向けのLaravel Frameworkバージョンの選択ガイドでは、この記事は、多くのバージョンの中で初心者が情報に基づいた選択を行うのを支援するように設計されたLaravelのバージョンの違いに分かれています。各リリースの主要な機能に焦点を当て、長所と短所を比較し、初心者がスキルレベルとプロジェクトの要件に基づいてLaravelの最も適切なバージョンを選択できるように便利なアドバイスを提供します。初心者の場合、Laravelの適切なバージョンを選択することは、学習曲線と全体的な開発経験に大きな影響を与える可能性があるため、重要です。
