2014-11-06 3 views
1

Я хочу отправить форму скрипту PHP, позволить скрипту сделать свою магию, а затем вернуть указанную магию в div как визуальный индикатор ее успеха/отказа/изменения статуса.Возвращение ответа PHP в запросе AJAX

У меня есть форма, которую я представить (я вырезал много посторонних входы/текстовые области и т.д. коды, которые не являются важными):

HTML:

<form name="ajaxform" id="ajaxform" method="post" action="ajax.php"> 
<table> 
<tr class="left"> 
<td>Reporter:</td> 
<td>//list of people</td> 
</tr> 
<tr class="left"> 
<td width="75%"> 
<p><label for="start">Start:</label> 
<input type="text" name="start" id="start"></p> 
<p><label for="end">End:</label> 
<input type="text" name="end" id="end"></p> 
</td> 
</tr> 
<tr> 
<td> 
<input name="sid" type="hidden" id="sid" value="<?=$sid?>"> 
<input name="table" type="hidden" id="table" value="add"> 
<input name="submit" type="submit" id="submit" value="Submit" class="submitForm"> 
</td> 
</tr> 
</form> 
<div id="messageResponse"></div> 

О представлении, следующий JS запускаемый:

JS:

$(function() { 
    $('#ajaxform').validate({ // initialize the plugin 
     errorClass: "invalid", 
     submitHandler: function (form) { 

     $.ajax({ 
       type:'POST', 
       url:'ajax.php', 
       data: $(form).serialize(), 
       success: function() { 
        $('#messageResponse').fadeIn(500); 
        $('#messageResponse').addClass('ui-state-highlight ui-corner-all').removeClass('ui-state-error'); 
        $('#messageResponse').text('Success!' + result);       
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        $('#messageResponse').fadeIn(500); 
        $('#messageResponse').addClass('ui-state-error ui-corner-all').removeClass('ui-highlight-error'); 
        $('#messageResponse').text(xhr.status + ' ' + thrownError + ': Something went wrong - check your inputs and try again.'); 
       } 

     }); 

     setTimeout(function(){ $('#messageResponse').fadeOut(500); }, 5000); 

     // resets fields 
     $('#ajaxform')[0].reset(); 
    } 
}); 

}); 

А потом я сценарий, который получает данные берется из списка нескольких PHP скриптов на основе табличных переменном передается из формы в скрытом вводе таблицы:

PHP:

if($_POST['table'] == "add"){ 

// Do mysql query which gives me an array 

    $result = array("foo" => "bar", "captain" => "coke"); 
    echo(json_encode($result)); 
} 

Я хочу для отправки моей формы, найдите ли он соответствующий код в ajax.php и выполните его, а затем верните результат этого скрипта PHP в div messageResponse. Где это так неудачно?

+1

Какая ошибка? – doublesharp

+0

У меня нет ошибки (или, самое большее, я получаю, что этот результат не определен в консоли). Если я изменил тип данных на «json», отправка формы просто отправит меня в файл ajax.php (чего он не должен). В противном случае я не получаю результат в div #messageResponse. – thebarless

ответ

3

Вы должны передать переменную result в методе success:

success: function (result) { 
    console.log(result); 
} 

Дополнительно:

  1. указан тип данных что y ou're ожидает от сервера:

    dataType: 'json' 
    
  2. Установите заголовок вашего результата в JSON (в файле PHP):

    header('Content-Type: application/json; charset=utf-8'); 
    
0

Просто добавьте:

$.ajax(...,dataType: "json",...); 
+0

Добавление или удаление типа данных ничего не меняет - не означает, что я пропускаю что-то невероятно, но это само по себе не решает проблему. – thebarless

0

просто удалить действие из форм использования этого

<form name="ajaxform" id="ajaxform" method="post" action="#"> 
Смежные вопросы