2015-05-20 260 views
1

我在使用php和ajax進行網頁聊天頁面時遇到問題。問題是,看到我的瀏覽器的網頁時,在控制檯apears這mesage:使用Ajax時500內部錯誤

POST http://subdomain.domain.com/ajax/sms.php 500 (Internal Server Error) 
x.ajaxTransport.send @ jquery.min.js:6 
x.extend.ajax @jquery.min.js:6 
doAjax @ funcionesChat.js:22onclick @ chat:50 

而且我不知道爲什麼apears這一點,我做了什麼錯在網頁...

在我的HTML我有如下因素代碼:

<button type="button" onclick="doAjax(2)">a</button> 
    <div class="chat"> 
    <div class="boxChat" id = "sms">     
    </div> 
    </div> 

在我ajaxfunction.js是下面的代碼:

function doAjax(idOne, idTwo) { 
    $.ajax({ 
     type: 'POST', 
     url: 'ajax/sms.php', 
     data: {idOne: idOne, idTwo: idTwo}, 
     dataType: 'text', 
     success: function (data) { 
      $('#sms').html(data); 
     } 
} 

而且sms.php包含以下代碼:

<?php 

$db = new PDO('mysql:host=localhost;dbname=XXXX;charset=utf8', 
      'user', 'password'); 

stmt = $db->query("SELECT * FROM sms WHERE sender = ".idOne." 
       AND reciver = ".idTwo.")"); 
$smss = $stmt->fetchAll(PDO::FETCH_ASSOC); 

foreach ($smss as $sms) { 
    if ($sms["sender"] == idOne){ 
     echo "<p style='text-align: right;'>".$sms["mesage"]."</p>"; 
    }else{ 
     echo "<p style='color: green;''>".$sms["mesage"]."</p>";  
    } 
} 
?> 

有人能給我個忙嗎?提前致謝。

+0

它看起來像Ajax是工作,這個問題將與你調用的頁面('AJAX/SMS。php') –

+0

你可以在你的ajax設置中處理錯誤:'error:function(jqXHR,textStatus,error){console.log(jqXHR.responseText); }' – wahwahwah

+0

另外,如果用戶打開郵遞員並提交請求,其中'idOne =「1; DROP TABLE sms」'? – wahwahwah

回答

2

您將JS和PHP語法混合起來,在sms.php文件中您有語法錯誤。

  1. 美元符號之前smtp
  2. idOne代替$_POST['idOne']
  3. idTwo而不是在SQL查詢的末尾
  4. 附加托架
  5. 管線11,再次的$_POST['idTwo']
  6. idOne代替 $_POST['idOne']


$stmt = $db->query("SELECT * FROM sms WHERE sender = ".$_POST['idOne']." 
      AND reciver = ".$_POST['idTwo']); 

和線路11

if ($sms["sender"] == $_POST['idOne']){ // $_POST['idOne'] instead of idOne 
0

我看到一對夫婦錯別字的位置:

stmt = $db->query("SELECT * FROM sms WHERE sender = ".idOne." 
       AND reciver = ".idTwo.")"); 

應該是:

$stmt = $db->query("SELECT * FROM sms WHERE sender = ".$idOne." 
       AND reciver = ".$idTwo.")"); 

哪裏是$idOne$idTwo定義?

也許你失去了一些東西,如:

$idOne = $_POST['idOne']; 
$idTwo = $_POST['idTwo']; 
0

一個500服務器錯誤。這意味着服務器上的某些東西壞了,所以它可能不是你的ajax,除非你發送完全無效的數據。有一個問題 - 是在數據庫中「接收」正確的字段名稱?拼錯了。如果這是數據庫中不正確的列名,那就是你的錯誤。

0

使用這樣

<?php 
    if(!isset($_POST['idOne'])){ 
     echo "Error! missing idOne"; 
    } else if(!isset($_POST['idTwo'])) { 
     echo "Error! missing idTwo"; 
    } else { 
     $idOne = $_POST['idOne']; 
     $idTwo = $_POST['idTwo']; 
     $db = new PDO('mysql:host=localhost;dbname=XXXX;charset=utf8', 
       'user', 'password'); 

    $stmt = $db->query("SELECT * FROM sms WHERE sender = ".$idOne." 
        AND reciver = ".$idTwo); 
    $smss = $stmt->fetchAll(PDO::FETCH_ASSOC); 

     foreach ($smss as $sms) { 
     if ($sms["sender"] == $idOne){ 
      echo "<p style='text-align: right;'>".$sms["mesage"]."</p>"; 
     }else{ 
      echo "<p style='color: green;''>".$sms["mesage"]."</p>";  
     } 
     } 
    } 
?> 
+0

你必須在doAjax函數中傳遞兩個參數doAjax(2,idTwo) –