2014-09-05 6 views
0

Я пытаюсь получить повесить Ajax звонки и я борюсь с основным миром кода :)Ajax вызов всегда возвращает ошибку, даже при успешном вызове

я получаю предупреждение об ошибке, даже если вызов кажется успешным. Я попытался отладить код и добавил некоторые точки останова и заметил, что выполняемая функция выполняет. Форма-информация была записана, и строка из PHP-скрипта возвращается. На короткое время текст появляется, но затем исчезает после выполнения функции. Во время отладки я не получаю сообщение об ошибке. Он появляется только при запуске скрипта.

Любая помощь была бы принята с благодарностью.

<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

Вы наблюдали процесс запроса/ответа в консоли браузера? –

+0

Вы уязвимы для SQL-инъекций. –

+0

SQL-атаки: я знаю. Я просто пробую простую функцию. –

ответ

-1

Попробуйте следующий фрагмент кода с помощью success и error обратных вызовов, а не 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

Это был первый способ, которым я его написал. Тот же результат. –

+0

"** Уведомление об изнашивании: ** Обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() устарели от jQuery 1.8. Чтобы подготовить код для их возможного удаления, используйте jqXHR.done (), jqXHR.fail() и jqXHR.always() вместо этого. " - http://api.jquery.com/jquery.ajax/ –

1

Вместо предупреждения вы можете попробовать использовать console.log. Вы также можете добавить параметры Faile функции, чтобы увидеть, что происходит с сервера

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

Это дает мне textStatus: error и errorThrown: blank: s –

+0

Затем посмотрите на HTTP-трафик. Вы можете проверить его с помощью инструментов разработчика в любом современном браузере или с расширениями, такими как Firebug для Firefox. Посмотрите конкретно, что такое код статуса HTTP для ответа. – MirMasej

+0

Состояние говорит 200 ОК. Я сделал снимок экрана POST: http://i.imgur.com/G1oPm2W.png. –

0

Я сомневаюсь, есть ли у вас написано названия полей и имя таблицы правильно

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

Правописание неправы в названии, и вы вставляете данные не в таблицу, вы вставляете их в db. Это не верно. Добавьте свое имя таблицы

+0

db может быть именем таблицы, а название не может быть английским. тем более, что они повторяются на выходе –

+0

@ Кай - я думал, что он ошибочно сделал это. Да, имена полей были повторены в нескольких местах и ​​могут быть некоторыми другими языками, но я благодарю вас за освобождение одного пункта. Я мог бы назвать имя таблицы. Tks man – gihanmu

+0

Да, извините. Я изменил некоторые имена, разместив вопрос. Это действительно должно быть стол. –

0

Перепробовав много разных вещей, это похоже на работу:

Я добавил атрибут действия в моей форме тега

<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

Это не обязательно. Ложно положительный. Скорее всего, одно из других изменений устранило вашу проблему. –

Смежные вопросы