web-dev-qa-db-ja.com

jQuery Ajaxはページ全体を返します

私はデータをphpスクリプトに送信するjquery-ajax関数を持っています。問題は戻り値にあり、単一の値ではなくページ全体を返します。

あなたの時間と助けをありがとう。

$("#ajaxBtn").click(function(){
  var inputText = $("#testText").val();

  $.ajax({ type: "POST",
    url: "index.php",
    data: "testAjax="+inputText,
    dataType: "html",
    success: function(html){
      alert(html);
    }
  });
});         
23
Sophia Gavish

それがどのように機能するかです。 AJAX経由でindex.phpをリクエストしているので、index.phpの内容が何であっても取得できます。

特定の値が必要な場合は、その値のみを出力する新しいPHP=ページを作成し、代わりにそのURLのコンテンツを要求します。

36
ceejayoz

最初にこれを_index.php_に持っていると?

_<?php 
   if (isset($_POST["testAjax"])) { 
       echo $_POST["testAjax"]; 
   } 
?>
_

このスクリプトがさらにテキストを出力している場合は、もちろんこれもAjax呼び出しによって受信されます。エコーの後にexit()を配置して、スクリプトがそれ以上処理されないようにすることができます。

_if (isset($_POST["testAjax"])) { 
    echo $_POST["testAjax"];
    exit();
}
_

また、返される値は明らかにHTMLではないため、_dataType: 'text'_を使用してください。


または、他の人が示唆しているように、Ajaxリクエストの処理を担当する新しいページを作成します。受け取った値を出力するだけではない場合(つまり、より複雑な操作)は、とにかくこれを行う必要があります。

13
Felix Kling

ソフィア、あなたの場合、あなたはあなたのデータをphpファイルに送るべきではありません、それはウェブブラウザによって見られた場合、ウェブサイトのページを表示します。返してほしいデータだけを返すphpファイルに情報を送信する必要があります。

したがって、「index.php」の代わりに、「my-ajax-script.php」のような名前のファイルを作成します。そのファイルには、データベースとphp関数ファイルに接続するために必要な「include()」ファイルが含まれている必要があります(つまり、POSTデータをサニタイズするため)。次に、ファイルには処理するコードが必要ですPOSTデータ、そしていくつかのhtmlタグで完全なデータをエコー出力します。このデータは既存のDOM(htmlマークアップ)に挿入されます。

6
superUntitled

私の場合、同じ問題を抱えている人は誰でも

bootstrap phpファイルでrequireの代わりにrequire_onceを使用して、システム全体でページ全体が2回再レンダリングされるのを防ぎます。

0
Sophie cai