2016-10-04 3 views
-1

Я пытаюсь вызвать PHP-файл через POST и вернуть его результат в код вызывающего AJAX. Но, к сожалению, это не работает. После возиться с моим кодом я либо получить «неопределенная», «перезагрузки страницы» или «ошибка в консоли, что мой параметр, используемый в функции успеха не определен»Восстановить возвращение JSON из PHP, вызванного из AJAX

Вот код Аякса:

function postComment(formdata) { 
if (formdata.comment != '') { 
    $.ajax({ 
     type: 'POST', 
     url: '../../includes/post_comment.php', 
     data: formdata, 
     headers: { 
      'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' 
     }, 
     success: postSuccess(data), // function to handle the return 
     error: postError // function to handle errors 
    }); 
    } else { 
     alert('Empty please write something!'); 
    } 
} 
function postSuccess(data) { 
    console.log(data); 
    $('#commentform').get(0).reset(); 
    displayComment(data); 
} 

и вот мой PHP обработчик:

$ajax = ($_SERVER['REQUESTED_WITH'] === 'XMLHttpRequest'); 
$added = add_comment($mysqli, $_POST); // contains an array 

if ($ajax) { 
    sendAjaxResponse($added); 
} else { 
    sendStandardResponse($added); 
} 

function sendAjaxResponse($added) 
{ 
    header("Content-Type: application/x-javascript"); 
    if ($added) { 
     header('Status: 201'); 
     echo(json_encode($added)); 
    } else { 
     header('Status: 400'); 
    } 
} 

это то, что добавили выглядит, как в PHP:

$added = array(
     'id' => $id,//integer example: 90 
     'comment_post_ID' => $story_ID, //integer example: 21 
     'comment_author' => $author, //String example: Dominic 
     'comment' => $comment, //String example: This is a comment 
     'comment_date' => $date); //DateTime/String example: 08/02/2016 1970-01-01 00:00:00 

ОБНОВЛЕНИЕ

Я изменил код Аякса следующее:

$.ajax({ 
     type: 'POST', 
     url: '../../includes/post_comment.php', 
     success: postSuccess, 
     data: formdata, 
     headers: { 
      'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest' 
     }, 
     error: postError, 
    }); 

Теперь я получаю полный HTML-код страницы вызова этой функции АЯКС

Я попытался установить aysnc: false в запрос ajax, но это не помогло, всегда получая html-код источника (вызывая функцию ajax).

На данный момент я перехожу к другому подходу, который не нуждается в данных возврата. Но спасибо за помощь

+1

'../../ включает/post_comment.php' не является URL –

+4

Когда вы укажете 'success: postSuccess (data)' вы _calling_ 'postSuccess' сразу, с несуществующим параметром' data'. – jszobody

+0

Попробуйте удалить '(data)'. Параметр success принимает функцию. Вы передаете результат этого вызова функции $ .ajax – Phil

ответ

0

браузер пытается выполнить ответ сервера из

header("Content-Type: application/x-javascript"); 

изменение

header("Content-Type: application/json"); 
+0

Не работает либо полный HTML-код, но спасибо – Sartharon

+0

в запросе Ajax также необходимо указать тип данных: $ .ajax ({dataType: ' json ', ... – buildok

+0

как-то получить ошибку синтаксического анализа теперь (console.log, используемый в ошибке: функция), даже когда i 'JSON.parse (formdata)' сначала какие-либо идеи? – Sartharon

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