2014-09-05 142 views
0

我試圖讓阿賈克斯的掛電話,我用的代碼:)Ajax調用總是返回錯誤,即使在成功調用

我保持甚至收到錯誤警報時調用一個基本的和平努力似乎是成功的。 我試圖調試代碼並添加了一些斷點,並注意到done函數會執行。 form-info已被寫出,並從php-script返回一個字符串。 對於短暫的文本確實出現,但在完成函數後消失。 調試時我沒有收到錯誤信息。它只會在正常運行腳本時出現。

任何幫助將不勝感激。

<div id="formDiv"> 
<form method="post" id="form"> 
<label for="title">Title: </label> 
<input type="text" name="title" id="title" /> 
<label for="composer">Composer: </label> 
<input type="text" name="composer" id="composer" /> 
<label for="link">Link: </label> 
<input type="text" name="link" id="link" /> 
<label for="description">Description: </label> 
<input type="text" name="description" id="description" /> 
<input type="submit"> 
</div> 

<div id="outerDiv"> 
    <p id="p"></p> 
</div> 

<script> 
$("#form").submit(function(){ 
    var postData = $(this).serializeArray(); 
    $.ajax({ 
    url: "test.php", 
    type: "POST", 
    data: postData, 
    dataType: "text"  
    }) 
    .done(function(data){ 
     $("#p").text(data); 
    }) 
    .fail(function(){ 
     alert("Error!"); 
    }); 
    }); 

</script> 

test.php的

<?php 
$dbc = mysqli_connect('localhost', 'root', '', 'db'); 
if ($dbc->connect_error) { 
die('Connect Error: ' . $dbc->connect_error); 
} 

$title = $_POST['title']; 
$composer = $_POST['composer']; 
$link = $_POST['link']; 
$description= $_POST['description']; 

$query = "INSERT INTO table(Titel, Componist, Link, Description) VALUES ('$title', '$composer', '$link', '$description')"; 
mysqli_query($dbc, $query); 


$resultquery = mysqli_query($dbc,"SELECT * FROM table"); 
$result = ""; 
while($row = mysqli_fetch_assoc($resultquery)){ 
    $result .= $row["Titel"]." | ".$row["Componist"]." | ".$row["Link"]." | ".$row["Description"]."\n"; 
} 

echo $result; 
mysqli_close($dbc); 

?> 
+0

您是否觀察到瀏覽器控制檯中的請求/響應過程? – 2014-09-05 17:45:48

+0

你很容易受到SQL注入攻擊。 – 2014-09-05 17:48:38

+0

SQL注入攻擊:我知道。我只是嘗試一個簡單的功能。 – 2014-09-05 18:17:01

回答

-1

嘗試使用successerror回調,而不是done和fail`下面的代碼片段。

$("#form").submit(function(){ 
    var postData = $(this).serialize(); 
    $.ajax({ 
     url: "test.php", 
     type: "POST", 
     data: postData, 
     dataType: "text", 
     success: function(data){ 
      $('#p').text(data); 
     }, 
     error: function(){ 
      alert("Error!"); 
     } 
}); 
+0

這是我寫它的第一種方式。同樣的結果。 – 2014-09-05 17:36:46

+0

「**棄用聲明:**從jQuery 1.8開始,棄用jqXHR.success(),jqXHR.error()和jqXHR.complete()回調爲準備代碼以便最終刪除它們,請使用jqXHR.done( ),jqXHR.fail()和jqXHR.always()來代替。「 - http://api.jquery.com/jquery.ajax/ – 2014-09-05 17:48:49

1

而不是提醒您可能會嘗試使用console.log。 您還可以添加參數faile功能來查看服務器

funcation fail(jqXHR, textStatus, errorThrown) { 
    console.log("textStatus: " + textStatus); 
    console.log("errorThrown: " + errorThrown); 
} 
+0

這給了我textStatus:錯誤和errorThrown:空白:s – 2014-09-05 18:23:13

+0

然後看HTTP流量。您可以使用任何現代瀏覽器中的開發人員工具或Firebug for Firefox等擴展來檢查它。具體來看,響應的HTTP狀態碼是什麼。 – MirMasej 2014-09-05 19:13:44

+0

狀態說200 OK。我製作了一個POST的截圖:http://i.imgur.com/G1oPm2W.png。 – 2014-09-05 21:14:02

0

我懷疑你是否有書面的字段名和表名正確

INSERT INTO db(Titel, Componist, Link, Description) 

拼寫錯誤的標題會發生什麼,並且你不是將數據插入到表中,而是將它們插入到數據庫中。這是錯誤的。添加您的表名

+0

db可能是表名,titel可能不是英文。特別是因爲這些在輸出 – 2014-09-05 17:56:30

+0

@凱 - 重複 - 我認爲他錯誤地做到了。是的字段名已在多處重複,可能是其他語言,但我感謝您澄清一點。即分貝可以我的表名。 Tks男士 – gihanmu 2014-09-05 18:03:04

+0

對不起。發佈問題時我改了一些名字。它應該是真的。 – 2014-09-05 18:20:29

0

嘗試了很多不同的東西在這之後似乎工作:

我已經添加action屬性到我的表單標籤

<form method="post" id="form" action="test.php"> 

和窗體上添加了preventDefault()並改變了錯誤處理

<script> 
$("#form").submit(function(e){ 
    var postData = $(this).serializeArray(); 
    $.ajax({ 
    url: "test.php", 
    type: "POST", 
    data: postData, 
    dataType: "text"  
    }) 
    .error(function(jqXHR, textStatus, errorThrown) { console.log(errorThrown); }) 
    .done(function(data){ 
     $("#p").text(data); 
    }) 
    e.preventDefault(); 
    }); 

</script> 

那麼爲什麼這個工作屬性是必需的?

+0

這是沒有必要的。假陽性。其他更改中很可能會解決您的問題。 – 2014-09-05 21:49:37

相關問題