如何使用Ajax将单个表单值传递给PHP?

问题描述:

我试图从一个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

你'$ .ajax'没有按;吨有'url',唯一缺少 –

+0

@MilanChheda从来就读取,如果你不把它的默认选项为你的同一页。这是错的吗? – JuanjoC

+0

嗯,你是对的@JuanjoC,我的小姐。 –

$(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

$(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

您未使用GET方法,这意味着你从PHP阅读后有效载荷://输入,这样的:

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

另一种可以将数据传递给url的选项是:yoururl?ucli = encodeURI(theValue) –

+0

这将如何实现? – JuanjoC

+0

第二个选项只是在$ .ajax中使用url参数,如'url?ucli'+ encodeURI(theValue),您当前的php代码应该可以工作,但是您应该在php $ _GET [' ucli'] –

PHP代码(发送到同一页面时)需要特别注意,以免整个页面内容在响应数据中返回。为此我倾向于用下面的办法 - ob_clean是有用的,它会清除生成到该点的文件

<?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的输出缓冲器需要一个网址 - 你正尝试将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

我仍然有同样的问题,无法捕获帖子,除非页面被刷新。但ty为您的答案。 – JuanjoC

+0

之前有一个轻微的打字错误(额外']'),但它似乎在测试 – RamRaider

+0

工作我没有使用ob_clean(),因为它搞乱了我在php中生成的动态表。这可能是一个市长问题吗?其余代码与您的答案几乎完全相同。 – JuanjoC