ホームページ >バックエンド開発 >PHPチュートリアル >緊急! ! PHP ページの読み込みの問題が不完全、オンラインなどです。

緊急! ! PHP ページの読み込みの問題が不完全、オンラインなどです。

WBOY
WBOYオリジナル
2016-06-23 14:16:581271ブラウズ

PHP

RT、同じページが複数回更新されます。正常な場合もあれば、半分しか表示されない場合もあれば、完全に空白の場合もあります
ページ全体

半分


このマシンのデバッグ時にはこの問題は発生しませんでした。それは外部ネットワーク上で公開されたときに起こりました。ドロップダウン ボックスの内容は、fopen で .tab ファイルを開き、ループを通じて配列に変換し、ループを通じて js 配列に値を代入することで読み取られます。ループは 1000 です。
set_time_limit(60*60*10) の設定はまだ無効です。 。 。
ご指導をお願いします、ありがとうございます。 。 。コードの一部を添付します
common.php<?phppublic static function readTabFile($fileName)		{			if (!file_exists($fileName)) 			{ 				die("<b>404 File not found!</b>"); 			} 			$handle = fopen($fileName, 'rb');			$contents = fread($handle, filesize ($fileName));						//iconv("UTF-8","GBK", $contents);						if(ord($contents) == 0xEF)			{				$contents = substr($contents, 4);			}			$rows = explode("\r\n", $contents);			fclose($handle);			$ret;			$colNames = null;			for($i = 0; $i < count($rows); $i++)			{				$row = $rows[$i];				if(!empty($row) && $row != "" && substr($row, 0, 1) != "#")				{					$col = explode("\t", $row);					if(empty($colNames) || $colNames == null)						$colNames = $col;					else					{						$item;						$itemId = (int)$col[0];						if(empty($itemId))						{							die("...");						}						for($j = 0; $j < count($col); $j++)						{							$value = $col[$j];														$item[$colNames[$j]] = $value;						}						$ret[$itemId] = $item;					}				}			}			return $ret;					}?>test.php<?php    $dir = "../goods.tab";    $table = Common::readTabFile($dir);?><script>	var goodsTb = new Array();	<?php			foreach($table as $key => $value)		{			echo "goodsTb[".$value["id"]."]=\"".iconv("GBK","UTF-8", $value["sz_name"])."\";";		}	?>	function checkNum(i)	{		var sle_obj = document.getElementById('valueType' + i);		var index = sle_obj.selectedIndex;		var valueType = sle_obj.options[index].value;		var num_obj = document.getElementById('count' + i);		if(valueType == -1)		{			alert('请选择道具类型!');		}		if(num_obj.value > 500)			num_obj.value = 500;	}		var i = 1;	function addFile()	{		var dv = document.getElementById("dvFiles");		var selectObj = document.createElement("select");		selectObj.name = "valueType";		selectObj.id = "valueType" + i;				var sg = document.createTextNode("选择道具 ");		dv.appendChild(sg);		//创建select选项卡		var myOption = document.createElement("option");		myOption.setAttribute("value","-1");		myOption.appendChild(document.createTextNode("无"));		selectObj.appendChild(myOption);		for (var key in goodsTb)		{			var op = document.createElement("option");			op.setAttribute("value", key);			op.appendChild(document.createTextNode(goodsTb[key]));			selectObj.appendChild(op);		}		dv.appendChild(selectObj);....

ディスカッションへの返信 (解決策)

お願いします |! !

オンラインで待っています、うおおおおおお

大事にしてください

コードが正常であれば正常であると考えられる場合もあります
完全に空白とはどういう意味ですか?ページ全体に一言も書かれていませんか?
これのほとんどはネットワークの問題であり、プログラムのアルゴリズムが複雑すぎてブラウザのタイムアウト範囲内に応答がない場合を除き、コードとは何の関係もありません

単語はなく、ただ空白です。 。 。
アルゴリズムも複雑ではありません。 。 。たった 2 つの 1000 ループです。コードも投稿しました。 。 。
ただし、ネットワークに関連している必要があり、ローカル デバッグは正常です。 。 。

空白の理由は、js内にループがあり、jsの実行が途中で止まっているためです。 。 。解決策を探しています

空白の理由は、js内にループがあり、jsの実行が途中で止まっているためです。 。 。解決策を探しています

それは js のパフォーマンスの問題である可能性があります

たとえば、smarty テンプレートを使用し、配列を表示テンプレートに渡し、HTML を返すようにすることを強くお勧めします。ループで取得するか、フロントエンドに出力します

jsループは使用しないでください


空白になっているのは、js内にループがあり、jsの実行が途中で止まっているためです。 。 。解決策を探しています

それは js のパフォーマンスの問題である可能性があります

たとえば、smarty テンプレートを使用し、配列を表示テンプレートに渡し、HTML を返すようにすることを強くお勧めします。ループで取得するか、フロントエンドに出力する

js ループを使用しないでください
js についてはよくわかりませんが、ff ページの実行ソース コードから判断すると、前のコードがphpで取り出した配列は正しいのですが、jsを出力すると止まってしまいます。
Smarty テンプレートについて学んだことがありません。js に関する解決策はありますか?

方法を変更すると、php を使用して直接 js を出力することはできなくなります。 。 。出力が常に不完全であるように感じます。 。 。


もう 1 つの可能性としては、サーバーのメモリ サイズ制限がこの影響を与える可能性があります。


空白の理由は、js内にループがあり、jsの実行が途中で止まっているためです。 。 。解決策を探しています

それは js のパフォーマンスの問題である可能性があります

たとえば、smarty テンプレートを使用し、配列を表示テンプレートに渡し、HTML を返すようにすることを強くお勧めします。ループで取得するか、フロントエンドに出力する

js ループを使用しないでください
js についてはよくわかりませんが、ff ページの実行ソース コードから判断すると、前のコードがphpで取り出した配列は正しいのですが、jsを出力すると止まってしまいます。
Smarty テンプレートについて学んだことがありません。JS に解決策はありますか?


JS には解決策と最適化方法が必要だと思います
しかし、ここでは言及できません
ループを実行するために PHP を使用することしか提案できません。
Smarty を理解していない場合でも、問題はありません。php で直接ループし、echo を使用して HTML を記述するだけです

なぜ js を使用してループし結合する必要があるのですか

echo $str;	foreach($table as $key => $value)	{		echo 'var op = document.createElement(\"option\");';		echo 'op.setAttribute(\"value\", "'.$value["id"].'");';		echo 'op.appendChild(document.createTextNode("'.iconv("GBK","UTF-8", $value["sz_name"]).'"));';		echo 'selectObj.appendChild(op)';	}	?>

php を使用するHTMLを出力することはまだ機能しません。 。 。 。 。 。 。 。 。 。 。

カーン あなたは PHP を使用して大量の js ステートメントを出力しました...


PHP を使用して HTML を直接出力することはできませんか...

あなたのページを見てみると、関連するステートメントはせいぜい数個しかありません。 select list にはバックグラウンドからデータを取得するための ajax が含まれている可能性があります。クエリと選択を送信するために html+js を出力することは完全に可能です。なぜすべての行が js コードである必要があるのでしょうか?せいぜいいくつかの関連する選択リストであれば、php がバックグラウンドからデータを取得してクエリと選択を送信することは完全に可能です。なぜ最初の行は js コードである必要があるのでしょうか。ドロップダウンボックスはphpが直接出力したhtmlですが、追加ボタンがあり、クリックするたびに追加されます。 新しいドロップダウンボックスを作成します。 。 。 。現在、ボタンの追加は Js を使用して実装されています


ページをざっと見たところ、バックグラウンドからデータを取得するための ajax があり、クエリと選択を送信することは完全に可能です。 js コードでなければなりませんか?
最初のもの ドロップダウン ボックスは PHP から直接出力された HTML ですが、追加ボタンがあり、クリックするたびに新しいドロップダウン ボックスが生成されます。 。 。 。現在の追加ボタンはJSで実装されています

追加をクリックすると、propsとitemを選択するドロップダウンボックスが表示されますね
違いがなければ直下にhtmlを挿入してください。前のドロップダウン リストが配置されている div は以上です

最初のドロップダウン ボックスのクラスが abc であり、ドロップダウン ボックスと次の入力ボックスが同じ div の下にあるとします
$(" .abc").parent().after($(".abc") .parent().html());
jquery は一文で実装されています

なんと言いますか? 業務内容が詳しくなるほど、理解できないのでこれ以上は言えません

実際、私が最終的に言いたいのは、それは完全に不要であるということです 複雑な JS ループを使用すると、ページが完全に表示されなくなります 実現するには多くの方法があります。これ

さて、jquery の使い方はとても簡単です - -

$(".abc").after($(".abc").html ()); 聞いてください、割り当てられたコンテンツの ID と名前を後で変更できますか?

サードパーティのテンプレート プラグインを使用したことがありますか? この問題は、通常、テンプレートの内部キャッシュ機能が原因で発生します

そうですね、jquery を使用するのは非常に簡単です - -

$(" について質問します。 abc").after($(".abc").html()); 後続の割り当ての ID と名前を変更できますか?

もちろん変更できます。これは別の質問です

それはあなた次第です 構造この選択リストの内容と js ファイルの記述方法

たとえば、val="id1234" などの各項目のカスタム属性を定義します

次に、項目を選択するときに、js を使用して選択内容を取得します。この val中央のテキスト説明

は、後続の入力の値に保存されます (jquery セレクターを使用すると非常に便利です)

これは比較的単純な js アプリケーションです

サードパーティを使用しましたか?テンプレート? プラグインは通常、テンプレートの内部キャッシュ機能が原因でこの問題を引き起こします。 。 。


さて、jquery を使うのはとても簡単です - -

$(".abc").after($(".abc").html()); で割り当てられた ID と名前を変更できるかどうか聞いてもいいですか
もちろん、これは別の質問です

それは、選択リストの構造と js ファイルの記述方法によって異なります

たとえば、各項目にカスタム属性を定義する場合は、次のようにします。 id1234"

次に、項目を選択するときに、js を使用して val と選択範囲の中央のテキスト説明を取得し、それを後続の入力の値に保存します (jquery セレクターを使用すると非常に便利です)

これは、js の比較的単純なアプリケーションです
jquery を使用したことがありません。いくつかの構文を理解するためにドキュメントを参照するだけです。 。 。
私が投稿した最初の写真は、商品を選択した後、数量を入力する必要があるというもので、選択の後にテキストが続きました。
[追加] をクリックした後、$(".abc").after($(". abc").html( )) このメソッドではselectとtextのidが元のものと同じになってしまいます。区別したいです。例えば変数iを使って制御し、iごとに1を加算します。追加した。 。
さらに、追加したい項目の後に削除ボタンを押すと、この項目を削除できます。参考としてコード例を教えてください。ありがとうございます - -



好吧,用jquery真的很简单- -
请问 $(".abc").after($(".abc").html()); 可以修改后面赋值内容的id跟name么

当然可以  这是另一个问题

看你的这个select列表的结构和你js文件的写法了

比如你给每一项定义一个自定义属性比如说叫val="id1234"

然后当你选择某一项时  用js获取选择项的这个val和中间的text描述

然后存入后边的input的value中  (用jquery选择器会很方便)

这是js比较简单的应用了.
jquery没有用过,只是参考文档能了解些语法。。。
我最早贴的图,就是我选择了物品后,需要填写数量,就是一个select跟一个text,
点击添加后,$(".abc").after($(".abc").html())这种方法,会导致select,text的id跟原来的一样,我想区分开来,比如用个变量i控制,每添加一个i就加1.。。
另外我想添加的项后面可以跟个删除按钮,点击删除可以删除本项,麻烦给个代码示例参考下,谢谢- -

抱歉才到家.
写了个简单的demo,只有增加和删除DIV的  选择后写入值的可以去网上搜下相关文章

<!doctype html><html lang="cn"><head>	<meta charset="UTF-8">	<title>Document</title>	<meta name="Keywords" content="" />	<meta name="Description" content="" />	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>	<script type="text/javascript">		function addDiv(){			var lastHtml = $(".abc:last").clone();									var item_id = $(".abc:last select").attr("id");			var input_id = $(".abc:last input").attr("id");			var new_item_id = "item_" + (parseInt(item_id.substr(5))+1);			var new_input_id = "item_num_" + (parseInt(input_id.substr(9))+1);			lastHtml.children("select").attr("name",new_item_id);			lastHtml.children("select").attr("id",new_item_id);			lastHtml.children("input").attr("name",new_input_id);			lastHtml.children("input").attr("id",new_input_id);			$(".abc:last").after("<div class='abc'>"+lastHtml.html()+"</div>");		}		function delDiv(obj){			var i = $(".abc").length;			if (i>1)			{				$(obj).parent(".abc").remove();			}else{				alert("至少选择一项");			}		}	</script></head><body>	<div><!--以后换成form-->		<div class="abc">			<select name="item_1" id="item_1" >				<option value="0">无</option>				<option value="1">剑气火灵幻影</option>				<option value="2">神武至尊怒火</option>				<option value="3">鬼舞玄冰法杖</option>			</select>			数量			<input type="text" name="item_num_1" id="item_num_1" value="" />			<a href="javascript:void(0)" onclick="delDiv(this)">删除</a>		</div>		<button onClick = "addDiv()">添加</button>	</div></body></html>


欢迎继续交流啊




好吧,用jquery真的很简单- -
请问 $(".abc").after($(".abc").html()); 可以修改后面赋值内容的id跟name么

当然可以  这是另一个问题

看你的这个select列表的结构和你js文件的写法了

比如你给每一项定义一个自定义属性比如说叫val="id1234"

然后当你选择某一项时  用js获取选择项的这个val和中间的text描述

然后存入后边的input的value中  (用jquery选择器会很方便)

这是js比较简单的应用了.
jquery没有用过,只是参考文档能了解些语法。。。
我最早贴的图,就是我选择了物品后,需要填写数量,就是一个select跟一个text,
点击添加后,$(".abc").after($(".abc").html())这种方法,会导致select,text的id跟原来的一样,我想区分开来,比如用个变量i控制,每添加一个i就加1.。。
另外我想添加的项后面可以跟个删除按钮,点击删除可以删除本项,麻烦给个代码示例参考下,谢谢- -

抱歉才到家.
写了个简单的demo,只有增加和删除DIV的  选择后写入值的可以去网上搜下相关文章

<!doctype html><html lang="cn"><head>	<meta charset="UTF-8">	<title>Document</title>	<meta name="Keywords" content="" />	<meta name="Description" content="" />	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>	<script type="text/javascript">		function addDiv(){			var lastHtml = $(".abc:last").clone();									var item_id = $(".abc:last select").attr("id");			var input_id = $(".abc:last input").attr("id");			var new_item_id = "item_" + (parseInt(item_id.substr(5))+1);			var new_input_id = "item_num_" + (parseInt(input_id.substr(9))+1);			lastHtml.children("select").attr("name",new_item_id);			lastHtml.children("select").attr("id",new_item_id);			lastHtml.children("input").attr("name",new_input_id);			lastHtml.children("input").attr("id",new_input_id);			$(".abc:last").after("<div class='abc'>"+lastHtml.html()+"</div>");		}		function delDiv(obj){			var i = $(".abc").length;			if (i>1)			{				$(obj).parent(".abc").remove();			}else{				alert("至少选择一项");			}		}	</script></head><body>	<div><!--以后换成form-->		<div class="abc">			<select name="item_1" id="item_1" >				<option value="0">无</option>				<option value="1">剑气火灵幻影</option>				<option value="2">神武至尊怒火</option>				<option value="3">鬼舞玄冰法杖</option>			</select>			数量			<input type="text" name="item_num_1" id="item_num_1" value="" />			<a href="javascript:void(0)" onclick="delDiv(this)">删除</a>		</div>		<button onClick = "addDiv()">添加</button>	</div></body></html>


欢迎继续交流啊 非常感谢,结贴!
交个朋友- -

都是新手 多交流

给你个小思路 看能帮到你不!

test.php<?php    $dir = "../goods.tab";    $table = Common::readTabFile($dir);    foreach($table as $key => $value)    {      echo "<option value='{$value["id"]}'>".iconv("GBK","UTF-8", $value["sz_name"])."</option>";   	}?>test.html //加载jquery<select id="tools" name="tools[]"></select><a href="javascript:addTools();"></a><script>function autoTools(){	var i=$("#tools").length-1;$.get("test.php",function(data){$("#tools:eq("+i+")").html(data);});}function addTools(){	$("#tools").after("<select id='tools' name='tools[]'></select>").autoTools();}autoTools();</script>





好吧,用jquery真的很简单- -
请问 $(".abc").after($(".abc").html()); 可以修改后面赋值内容的id跟name么

当然可以  这是另一个问题

看你的这个select列表的结构和你js文件的写法了

比如你给每一项定义一个自定义属性比如说叫val="id1234"

然后当你选择某一项时  用js获取选择项的这个val和中间的text描述

然后存入后边的input的value中  (用jquery选择器会很方便)

这是js比较简单的应用了.
jquery没有用过,只是参考文档能了解些语法。。。
我最早贴的图,就是我选择了物品后,需要填写数量,就是一个select跟一个text,
点击添加后,$(".abc").after($(".abc").html())这种方法,会导致select,text的id跟原来的一样,我想区分开来,比如用个变量i控制,每添加一个i就加1.。。
另外我想添加的项后面可以跟个删除按钮,点击删除可以删除本项,麻烦给个代码示例参考下,谢谢- -

抱歉才到家.
写了个简单的demo,只有增加和删除DIV的  选择后写入值的可以去网上搜下相关文章

<!doctype html><html lang="cn"><head>	<meta charset="UTF-8">	<title>Document</title>	<meta name="Keywords" content="" />	<meta name="Description" content="" />	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>	<script type="text/javascript">		function addDiv(){			var lastHtml = $(".abc:last").clone();									var item_id = $(".abc:last select").attr("id");			var input_id = $(".abc:last input").attr("id");			var new_item_id = "item_" + (parseInt(item_id.substr(5))+1);			var new_input_id = "item_num_" + (parseInt(input_id.substr(9))+1);			lastHtml.children("select").attr("name",new_item_id);			lastHtml.children("select").attr("id",new_item_id);			lastHtml.children("input").attr("name",new_input_id);			lastHtml.children("input").attr("id",new_input_id);			$(".abc:last").after("<div class='abc'>"+lastHtml.html()+"</div>");		}		function delDiv(obj){			var i = $(".abc").length;			if (i>1)			{				$(obj).parent(".abc").remove();			}else{				alert("至少选择一项");			}		}	</script></head><body>	<div><!--以后换成form-->		<div class="abc">			<select name="item_1" id="item_1" >				<option value="0">无</option>				<option value="1">剑气火灵幻影</option>				<option value="2">神武至尊怒火</option>				<option value="3">鬼舞玄冰法杖</option>			</select>			数量			<input type="text" name="item_num_1" id="item_num_1" value="" />			<a href="javascript:void(0)" onclick="delDiv(this)">删除</a>		</div>		<button onClick = "addDiv()">添加</button>	</div></body></html>


欢迎继续交流啊 非常感谢,结贴!
交个朋友- - 哥们在吗?问个问题



ページをざっと見たところ、バックグラウンドからデータを取得するために ajax があり、クエリと選択を送信することは完全に可能です。行は js コードでなければなりませんか?
まず、ドロップダウン ボックスは php によって直接出力された html ですが、追加ボタンがあり、クリックするたびに新しいドロップダウン ボックスが生成されます。 。 。 。現在の追加ボタンはJSで実装されています

追加をクリックすると、propsとitemを選択するドロップダウンボックスが表示されますね
違いがなければ直下にhtmlを挿入してください。前のドロップダウン リストが配置されている div は以上です

最初のドロップダウン ボックスのクラスが abc であり、ドロップダウン ボックスと次の入力ボックスが同じ div の下にあると仮定します
$(" .abc").parent().after($(".abc") .parent().html());
jquery は一文で実装されています

なんと言いますか? 業務内容が詳しくなるほど、理解できないので、ここではこれ以上は言えません

実際、私が最終的に言いたいのは、それはまったく不要であるということです 複雑な JS ループを使用すると、ページが不完全に表示されます これを実現するには、さまざまな方法があります。 。 。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。