2017-08-09 122 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

你'$ .ajax'沒有按;噸有'url',唯一缺少 –

+0

@MilanChheda從來就讀取,如果你不把它的默認選項爲你的同一頁。這是錯的嗎? – 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

您未使用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'] –

0

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

相關問題