質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

1493閲覧

Ajaxを使って外部HTMLを画面に表示する際にmax_input_varsの制限エラーが出る

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2018/12/04 01:57

前提・実現したいこと

Ajaxを使って外部HTML(smatyで作成したtpl)を画面の特定部分に表示しています。
検索条件を指定してボタン押下→右部分にajaxで取得したhtmlをそのまま表示、といった作りです。

下記のエラーが出ている為解決したいです。

テスト環境ではうまくいっていたのですが本番データが大量のため、
戻りのhtmlがかなり大きいサイズになって戻ってきていますが、やはりそれが原因なのでしょうか?

また、2,3回検索を繰り返した後に出る事が多く
どこかでキャッシュかなにかで膨らんでいるのか?よくわからない状態です。

発生している問題・エラーメッセージ

unknown input variables exceeded 1000. to increase the limit change max_input_vars

該当のソースコード

js

1 2param1~4は画面で指定された検索条件とお考え下さい。 3これらの値にはたいしたものは入っておらず、コード、文字列のようなものです。 4何度検索ボタンを押下しても、 5長さの条件にひっかかるような大量なデータは入っていないことは確認済です 6 7 $.ajax({ 8 type: 'GET', 9 url: "hogehoge", 10 dataType: 'html', 11 data: {"param1": param1, "param2": param2, "param3": param3, "param4": param4, "paramText": paramText} 12 }).done(function (html) { 13        14       // 取得したhtmlを埋め込みたいエリア 15 var $testarea = $(".testarea"); 16 // エリア内クリア 17 $testarea .empty(); 18 // 取得したhtmlを追加 19 $testarea .append(html); 20 21 }).fail(function(jqXHR, textStatus, errorThrown) { 22      //エラー時処理 23 }); 24 25

補足情報(FW/ツールのバージョンなど)

1度にPOST出来る数に上限が設けられているようですが、getで取得するhtmlの大きさにも
やはり上限があるのでしょうか?
max_input_varsの初期値を安易に変えるのはちょっと、と思い質問してみました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/04 02:05

Ajax関係なく、php側の問題と思われますが、本番と検証環境のmax_input_varsの値は同一の設定となっていますか?
ms5025

2018/12/04 02:11

max_input_varsの値は同じです。しかしこの値を大きくしたりするのは問題の解決になっていない気がするのでこのサイズを広げたりする解決方法は取りたくない感じです。
guest

回答3

0

とりあえず送ったデータをデベロッパーツールで確認してみてはいかがでしょうか。
なんとなく大量のCOOKIEがあるのではという気がします。

【Chrome デベロッパーツール Networkパネルの使い方 | Web Tips】
http://weback.net/utility/1491/

投稿2018/12/04 08:19

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/12/05 05:23

ありがとうございます。確認してみます! >大量のCOOKIEがあるのではという気 えー 確認してみます。 戻りの値ではなく、送信の値ということですよね。 何か変なことをしてる可能性があるので調査してみます。 ありがとうございます。
guest

0

ベストアンサー

リクエストのパラメーター数が1000を超えているという内容ですね。
それが想定どおりなのであれば、サーバー(PHP)側の設定変更が必要となります。

意図していない内容であれば、どのようなリクエストが送られているか
確認してみてはいかがでしょうか。
ChromeであればデベロッパーツールのNetworkタブから
リクエストの内容が確認できます。

投稿2018/12/04 02:27

take_3306

総合スコア242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/12/04 02:48

もちろん確認しました。 意図したとおりのリクエストしか送られていません。
take_3306

2018/12/04 04:08

なるほど。ではサーバー側でパラメーターの内容を見ることは可能でしょうか。 PHPであれば以下でダンプできます。 ``` var_dump($_GET, $_POST); ``` GETで送っているとは思いますが、念のためPOSTの中身も見てみてください。
ms5025

2018/12/04 04:24

ありがとうございます $_GET ["param1"] => array(3) { [0] => string(4) "1,10" [1] => string(4) "1,20" [2] => string(4) "1,25" } ["searchText"] => string(12) "けんさくわーど" ["_"] => string(13) "1543897070791" $_POST array(0) { } になります。 ていうか ["_"] => string(13) "1543897070791" ↑これなんだろう?? ちょっとわからないんですが、一応想定してるようなものが送信されています。
退会済みユーザー

退会済みユーザー

2018/12/04 06:08

「_」は$.ajaxがキャッシュ避けのために自動的に付加される値となります。$.ajaxのcacheオプションはデフォルトで「false」なので、「_」を付加したくない場合$.ajaxのオプションに「cache:ture」を付加することになります。 が、この場合、ブラウザでキャッシュを参照してしまうことになるので、想定される結果が得られない場合があります。
ms5025

2018/12/05 05:22

ありがとうございます!そうだったのですね! キャッシュ避けのために自動的に付加される値と初めて知りました。 勉強になりました。 POSTで今の所対応していますが、どこか自分のソースにおかしいところがあるかもしれません 引き続き調査してみます。
guest

0

input variablesなのでレスポンス(戻り)よりもリクエスト(送信)の方の問題ですね。
GETって結局URLパラメータなので、「URLとして使える最大文字数」に引っかかっているのではと思います。
全角文字列などはパラメータ時はURLエンコードされているものですので、それによって「URLとして使える最大文字数」を超えてしまったのかなあと。

実際に投入されたデータを提示されるともっと具体的な検証やアドバイスが得られるかもしれません。

投稿2018/12/04 04:14

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2018/12/04 04:26

実際に投入されたデータはこのご時世なのでネットにあげるのは難しいのですが、 対して長そうでなくてもエンコードされてばそこそこ長くなるという感じなのでしょうか? 一応POSTにして キャッシュfalseにしてみるとエラーは出なくなりました。 $.ajax({ type: 'POST', url: "itemlist", dataType: 'html', cache: false, しかし対応としてこれであっているんでしょうか??
m.ts10806

2018/12/04 04:29

urlエンコードしてみればわかるかと。 その方法で解決しそうなら キャッシュの問題はないとは言えないですね。 提示の情報だけでは再現確認とれないのでなんとも言えないのが実際です。 気になるならGETではなくPOSTにされては?
ms5025

2018/12/04 04:34

GETで送った際のurlのパラメータをみてみましたが 「max_input_varsというinput数の上限値」 とあるので パラメータ上限値が1000ということだとすると余裕で大丈夫なのかな?と思いますが urlの長さ制限なんかもあるのでしょうか?
m.ts10806

2018/12/04 04:43

URL長についてはあくまで可能性の問題ですね。 別回答のコメントで提示されているように想定していないものがくっついてきているようですし。 (というか別回答のコメントで$_GETの結果を出されてますけど、「ネットにあげるのは難しい」のではなかったんですか?)
ms5025

2018/12/04 05:49

$_GETの結果はもちろんテコ入れしています。 これに関しては >param1~4は画面で指定された検索条件とお考え下さい。 >これらの値にはたいしたものは入っておらず、コード、文字列のようなものです。 で十分雰囲気はつかめるかと思います。 この一文以上のデータということは もっと具体的なデータの提示かと思いました。
m.ts10806

2018/12/04 05:54

あ、そうです。テコ入れマスクなしの具体的なデータのことでした。 ひとまずこちらで再現確認がとれない以上はそちらでエラーなしで通ったやり方を正とするしかなさそうに思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問