2017-08-09 1 views
0

Ajax関数の値をPHP(同じページ)に渡そうとしていますが、それをキャッチすることはできません。私はアラートで値を示し、それは正常に動作するようですが、PHPはそれを受け取ることはありません。 PHPは送信と正常に動作していますが、Ajaxを使用してページを更新する必要はありません。Ajaxで単一のフォーム値をPHPに渡すにはどうすればいいですか?

AJAX

$(function(){ 
     $('#ucli').on('input', function() { 
      var client = $('input[name="ucli"]').val(); 
      var dataString = "ucli=" + client; 
      alert(dataString); 
      $.ajax({ 
       type: "POST", 
       data: dataString, 

       success: function(response){ 
        $('ucli').html(data); 


       } 
      }); 

     }); 
    }); 

PHP

if(isset($_POST['ucli'])){ 

    $em = mysqli_real_escape_string($conn,$_POST['ucli'] . ''); 
    //SQL STUFF 
} 
+1

あなた 'doesnの$ .ajax'; tは'持っurl'、それは@MilanChheda I'veは、あなたがそれを置くいけない場合、デフォルトのオプションであることを読ん –

+0

欠けていますあなたの同じページ。これは間違っていますか? – JuanjoC

+0

うーん、あなたは正しい@JuanjoC、私のミスです。 –

答えて

0
$(function(){ 
    $('#ucli').on('input', function() { 
     var client = $('input[name="ucli"]').val(); 
     var dataString = "ucli=" + client; 
     alert(dataString); 
     $.ajax({ 
      type: "POST", 
      data: {ucli: client}, 
      success: function(response){ 
       $('ucli').html(data); 
      } 
     }); 
    }); 
}); 
+1

このコードスニペットは正しい解決策ですが[説明を含む](https://meta.stackexchange.com/questions/114762/explaining-entirely-%E2%80%8C%E2%80%8Bcode-based-回答)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者に答えようとしていることを覚えておいてください。そうした人々はあなたのコード提案の背後にある理由を知らないかもしれません。 –

+0

それはまだ動作させることはできません...そして、彼らは小さな間違いかもしれないと思います(?)。データ:では、それはクライアントの代わりにdataStringですか?あなたの答えはTyです。 – JuanjoC

0
$(function(){ 
    $('#ucli').on('input', function() { 
    var client = $('input[name="ucli"]').val(); 
    var dataString = "ucli=" + client; 
    alert(dataString); 
    $.ajax({ 
    url: "path to php file", 
    type: "POST", 
    data: dataString, 

    success: function(response){ 
    $('ucli').html(data); 


    } 
    }); 

    }); 
    }); 
+1

あなたのやったことを説明してください。これは全く同じです。少なくとも、あなたのコードをフォーマットしてください。 – Martijn

+0

AJAX呼び出しにURLパラメータを追加しました。ありがとう。 – user1544541

+0

ハハはい私は知っている。しかしあなたのポストにそれを加えて、誰かを困惑させる代わりに何をしたのか説明してください。この小さなスニペットでは実行可能ですが、より大きいまたはより複雑な回答では、それ以上は機能しません。 – Martijn

0

あなたは、PHPからポストペイロードを読んで意味GETメソッド、使用されていません:そのような、//入力:

$entityBody = file_get_contents('php://input'); 
+0

もう1つのオプションとして、次のようなURLにデータを渡すことができます:yoururl?ucli = encodeURI(theValue) –

+0

これはどのように実装されますか? – JuanjoC

+0

2番目のオプションは、 'url?ucli' + encodeURI(theValue)のようなjavascriptコードに$ .ajaxのurlパラメータを使用するだけで、現在のPHPコードはうまくいくはずですが、PHP $ _GET [' ucli '] –

0

PHPコード(同じページに送信する場合)は、ページ全体の内容が応答データに返されないように注意する必要があります。そのために、私は次のようなアプローチを使用する傾向がある - それは、文書

<?php 

    if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['ucli'])){ 
     /* 

      Prevent other page content prior to this point 
      being included in whatever response is sent by 
      clearing the output buffer 
     */ 
     ob_clean(); 

     /* Capture post variable */ 
     $ucli = filter_input(INPUT_POST, 'ucli', FILTER_SANITIZE_STRING); 

     /* Do stuff */ 

     /* send response */ 
     echo $ucli; 

     /* 
     Immediately terminate from this portion of code so that 
     the only response sent is what you determine above 
     */ 
     exit(); 
    } 

?> 

AJAX機能でその時点までに生成された任意のHTMLの出力バッファをクリアすることでob_cleanが有用であるが、URLを必要とする - あなたとPOSTリクエストを同じページに送信しようとしています。location.hrefを使用できます。コールバック(成功)関数は、送信されたデータを処理しているように見える前に応答を処理する必要があります。

$(function(){ 
    $('#ucli').on('input', function() { 

     var client = $('input[name="ucli"]').val(); 
     var dataString = 'ucli=' + client; 

     $.ajax({ 
      url: location.href, 
      type: 'POST', 
      data: dataString, 
      success: function(response){ 
       $('ucli').html(response); 
      }, 
      error: function(err){ 
       alert(err) 
      } 
     }); 
    }); 
}); 

全ページの例

<!doctype html> 
<html> 
    <head> 
     <title>jQuery</title> 
     <script src='//code.jquery.com/jquery-latest.js'></script> 
     <script> 
      $(function(){ 
       $('#ucli').on('input', function() { 

        var client = $('input[name="ucli"]').val(); 
        var dataString = 'ucli=' + client; 

        $.ajax({ 
         url: location.href, 
         type: 'POST', 
         data: dataString, 
         success: function(response){ 
          $('#result').html(response); 
         }, 
         error: function(err){ 
          alert(err) 
         } 
        }); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <?php 

      if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['ucli'])){ 
       /* 

        Prevent other page content prior to this point 
        being included in whatever response is sent by 
        clearing the output buffer 
       */ 
       ob_clean(); 

       /* Capture post variable */ 
       $ucli = filter_input(INPUT_POST, 'ucli', FILTER_SANITIZE_STRING); 

       /* Do stuff */ 

       /* send response */ 
       echo $ucli; 

       /* 
       Immediately terminate from this portion of code so that 
       the only response sent is what you determine above 
       */ 
       exit(); 
      } 

     ?> 

     <form name='jqt' method='post'> 
      ucli:<input type='text' name='ucli' id='ucli' /> 
      <div id='result'></div> 
     </form> 
    </body> 
</html> 
+0

私はまだ同じ問題を抱えていますが、ページが更新されない限り、投稿をキャプチャできません。 – JuanjoC

+0

(余分な ']')の前にわずかなタイプミスがありましたが、テストで動作するようです。 – RamRaider

+0

私はPHPで生成する動的テーブルを使いこなすのでob_clean()を使用していません。それが市長の問題だろうか?残りのコードはあなたの答えとほとんど同じです。 – JuanjoC

関連する問題