2014-12-26 147 views
0

我點擊一個div後試圖改變的數據,但它不是去改變結果Ajax請求doen't返回數據

JS代碼

$(document).ready(function() { 

    $('#piso .caixa').click(function() { 
     var valorpiso = $(this).text(); 
     alert(valorpiso); 
     $.ajax({ 
      type:"post", 
      url:"getpiso.php", 
      data:"npiso="+valorpiso, 
      sucess:function(data){ 
       $("#caixas").html(data); 
      } 
     }); 
    }); 

}); 

警報被打印正確的價值

PHP代碼

$piso1=$_POST["npiso"]; 

$result=mysql_query("select * FROM rooms where floor='$piso1' "); 
while($dados=mysql_fetch_array($result)){ 
    echo "<div id='caixa'>"; 
    echo "<p>$dados[block].$dados[floor].$dados[room]</p>"; 
    echo "</div>"; 
} 

你能幫助我嗎?

+0

** **危險:您使用[一個** **過時數據庫API](http://stackoverflow.com/q/12859942/19068),並應使用[現代替代](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你也**易受[SQL注入攻擊](http://bobby-tables.com/)**,現代的API會使[防禦]更容易(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

回答

1

這是你的實際代碼? 回調函數中存在一個錯誤:它應該是「成功」,而不是「成功」。

success:function(data){ 
    $("#caixas").html(data); 
} 

如果這不起作用,請嘗試獲取有關正在發生的事情的更多信息。使用某種開發工具來觀看Ajax響應。 (在Chrome上按CTRL + SHIFT + I)

OBS:您的PHP代碼易受SQL注入影響。瞭解更多關於在這裏:​​How can I prevent SQL injection in PHP?

+0

我已更正「成功」,並且ajax響應正確,但未在#caixas中打印 –

+0

您是否嘗試檢查HTML中的其他拼寫錯誤?或者使用javascript控制檯運行$(「#caixas」)。html(「Test string」)並查看會發生什麼。 – Rogerio

0
  • 你應該調試(警報()或執行console.log())來檢查數據已成功處理程序正常返回,並檢查是否ID爲「#caixas」元素已經存在。
1

有2個問題

1)@Rogerio說是正確的,你用"sucess":時,正確的做法是"success":

但現在使用jQuery你可以使用以下方法:

  • jqXHR.done(function(data, textStatus, jqXHR) {});

    s的另一種構造使用回調選項,.done()方法替代已棄用的jqXHR.success()方法。有關實施細節,請參閱deferred.done()

  • jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});

    的替代構造,以錯誤回調選項,.fail()方法替換不推薦使用.error()方法。有關實施細節,請參閱deferred.fail()

  • jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { });

    的替代構造,以完整的回調選項,.always()方法替換不推薦使用.complete()方法。

    爲了響應成功的請求,函數的參數與.done():data,textStatus和jqXHR對象的參數相同。對於失敗的請求,參數與.fail()的參數相同:jqXHR對象,textStatus和errorThrown。有關實施細節,請參閱deferred.always()

  • jqXHR.then(function(data, textStatus, jqXHR) {}, function(jqXHR, textStatus, errorThrown) {});

    集成了的.done().fail()和方法的功能,從而允許(如jQuery的1.8的)被操縱底層無極。有關實施細節,請參閱deferred.then()

閱讀有關:http://api.jquery.com/jquery.ajax/

A型,您可以使用"npiso="+valorpiso,但這不編碼,更喜歡使用JSON,像這樣:{ npiso: valorpiso }(jQuery的自動編碼數據)

2)不要

while($dados=mysql_fetch_array($result)){ 
    echo "<div id='caixa'>"; 

使用class=代替:噸使用由結果數重複的ID在HTML中,此repeate ID

首先,更新Jquery to last version

的Javascript:

$.ajax({ 
    "type": "POST", 
    "url": "getpiso.php", 
    "data": { "npiso": valorpiso } 
}).done(function(data) { 
    console.log(data); 
    $(".list_caixa").html(data); 
}).fail(function(err) { 
    console.log("Failed", err); 
}).always(function() { 
    console.log("complete"); 
}); 

「HTML」:

$piso1=$_POST["npiso"]; 

$result=mysql_query("select * FROM rooms where floor='$piso1' "); 
while($dados=mysql_fetch_array($result)){ 
    echo "<div class='list_caixa'>"; 
    echo "<p>$dados[block].$dados[floor].$dados[room]</p>"; 
    echo "</div>"; 
} 
+0

我試過,但它沒有在控制檯上寫任何東西 –

+1

它已經在工作,謝謝:) –

-1

的index.php

`

<html> 

    <head> 

     <script src="//code.jquery.com/jquery-1.10.2.js"></script> 
     <script> 
      $(function() { 
       $('#piso .caixa').click(function() { 
       var valorpiso = $(this).text(); 
       $.ajax({ 
        type: "post", 
        url: "getpiso.php", 
        data: "npiso=" + valorpiso, 
        success: function (data) { 
         $("#caixas").html(data); 
        } 
       }); 
      }); 

     }); 
     </script> 
    </head> 
    <body> 
     <div id="piso"> 
     <p class="caixa" style="cursor:pointer;color:red;background-color:#000;padding:10px;">TEST</p> 
     </div> 
     <div id="caixas"> 

     </div> 
</body> 

'

getpiso.php

 <?php 
     if($_POST["npiso"]!=null){ 
      $piso1=$_POST["npiso"]; 
      echo "<div id='caixa'>"; 
      echo "<p>".$piso1." RESULT</p>"; 
      echo "</div>"; 
     } 
     ?>