たとえば、PHP プログラムは
echo 'yt|'.$row["dig"]; を出力します
Ajax プログラムはそれを分割します:
function Dig(id) { //投票リンクがクリックされたとき
var content = document.getElementById("dig"+id); //「Vote」を表示する要素を取得します
//投票数を表示する要素を取得します。その id 属性値は、id=3 と同様の数値です。 "
var dig = document.getElementById(id);
$.ajax({
type: "get",
url: "service.php",
data: {id:id,n:Math.random()} , // レコード ID を service.asp に送信します
beforeSend:function(){$(dig).html('');},
success: function(data ){ / /返されたデータを処理します
r=data.split("|");
alert(r[0]);
if(r[0] == "yt" ) { //投票が行われた状況Cast
(content).html("あなたはすでに投票しました!"); //レコードが見つかりません
{alert("パラメータエラー!") }
else{
$(dig).html(data); /サーバーは正常に変更され、投票数が更新されました
$(content).html("投票は成功しました ") //1 つの投票を成功した投票に変更します
setTimeout("rightinfo("+id+")", 3000); // 3 秒後に rightinfo(id) を呼び出します
テスト後、問題は r[0] == "yt" が false を返すことです。ただし、alert(r[0]); を使用すると、出力結果は yt ですが、yt の上に空白行があるようです。
以前は、ASP プログラム出力を使用する場合にはこのような問題はありませんでした。
Response.Write("yt"&","&rs("Dig"))
この問題はオンラインでは見つかりません。理由は?
ディスカッションへの返信 (解決策)
1. PHP ファイルの前に空白行がないことを確認してください
2. ファイルが utf-8 でエンコードされている場合は、BOM ヘッダーがないことを確認してください
たとえば、PHP プログラムは
echo 'yt|'.$row["dig"]; を出力します
Ajax プログラムはそれを分割します:
function Dig(id) { //投票リンクがクリックされたとき
var content = document.getElementById("dig"+id); //「Vote」を表示する要素を取得します
//投票数を表示する要素を取得します。その id 属性値は、id=3 と同様の数値です。 "
var dig = document.getElementById(id);
$.ajax({
type: "get",
url: "service.php",
data: {id:id,n:Math.random()} , // レコード ID を service.asp に送信します
beforeSend:function(){$(dig).html('');},
success: function(data ){ / /返されたデータを処理します
r=data.split("|");
alert(r[0]);
if(r[0] == "yt" ) { //投票が行われた状況Cast
(content).html("あなたはすでに投票しました!"); //レコードが見つかりません
{alert("パラメータエラー!") }
else{
$(dig).html(data); /サーバーは正常に変更され、投票数が更新されました
$(content).html("投票は成功しました ") //1 つの投票を成功した投票に変更します
setTimeout("rightinfo("+id+")", 3000); // 3 秒後に rightinfo(id) を呼び出します
テスト後、問題は r[0] == "yt" が false を返すことです。ただし、alert(r[0]); を使用すると、出力結果は yt ですが、yt の上に空白行があるようです。
以前は、ASP プログラム出力を使用する場合にはこのような問題はありませんでした。
Response.Write("yt"&","&rs("Dig"))
この問題はオンラインでは見つかりません。理由は?
まず、戻り値の前後のスペースを削除します
trim(data) もちろん、trim(r[0]) からスペースを削除することもできます
いいえ、実際に私が考えたスペースはありません。スペースを削除するために Trim 関数を使用したり、整数に変換するために intval を使用したりするなど、さまざまな方法があります。私のファイルはgb2312でエンコードされており、その前にheader("Content-type: text/html; charset=gb2312");
ASPプログラムのrsをphpの$rowに変更しただけですが、変更されませんでした。 work
私 次の記事に記載されている問題が原因だと思います:
Ajax の戻り値のキャリッジリターン (ラインフィードとも呼ばれます) の解決策
http://www.111cn.net/ wy/js-ajax/39612 .htm
if(r [0] == "yt" ) 判定結果は常に false
でも、r[0] は明らかに yt で、データ型も string なので混乱します
echo base64_encode(file_get_contents('http://localhoust) /service.php?id=3 '));
結果を投稿してください
モデレーター、結果は次のとおりです:
DQoNCjM4
ブラウザでリンクを直接実行すると、結果は 37 ですが、上に 2 つの空行があります, 37 は $row['dig' ] の値です
$s = 'DQoNCjM4';$s = base64_decode($s);echo bin2hex($s);
はこのファイルまたは埋め込みファイル内にある可能性があります
ああ、そうそう、私がインクルードした conn.php ファイルの下部に 2 つの空白行がありました。上に空白行はありませんでしたが、下の行は空です。削除後はすべて正常です。 if(r[0] == "yt" ) が true の場合、
また、4 階で説明した空白行を削除する方法は、実際には役に立ちません。
したがって、プログラム ファイルの最後にある ?> を省略すると、空白行が少なくなります。
data.replace(/[rn]+/g, "")