2014-02-02 4 views
-1

Я пытаюсь понять, как метод $.post() работает в JQuery БЕЗ использования $.ajax, как я видел в видеоуроке по php acadamy, но автор сделал это действительно запутанным, назвав его переменные то же самое.JQuery .post() с php

В целом это то, что я планирую сделать:

Сценарий предполагают, чтобы быть контактный сценарий: пользователь создает отдельные строки договора, которые сохраняются в многомерном object/array, содержащий ключ и срок, когда они завершают контракт (нажав кнопку), key/term array/object отправляется на скрипт PHP, который сохраняет его в базе данных, а затем отправляет его обратно на страницу, которая будет отображаться правильно разобранным.

Часть, на которую я застрял, получает объект для скрипта php и получает ответ от PHP-скрипта (в конечном счете) обратно в jquery.

$('#createbtn').click(function() { 
    $.each(terms_array,function(key, value) { 
     var toAdd = value; 
     $.post('contract_handler.php',{toAdd:toAdd}, function(data){ 
      $('contractlist').append(data); 
     }); 

    }); 

}); 

Я не уверен, что происходит в {toAdd: toAdd}.

Я знаю, что одна из них является переменной в jquery. Является ли другое переменным именем переменной в PHP? Является ли это переменной hte, которая должна быть передана обратно?

<?php 
if(isset($_POST['toAdd'])) 
    $x = $_POST['toAdd'] 
    //do database saving and parsing and what not... 
    /* NOW HOW DO I GET X BACK TO THE JQUERY AS 'data' SO IT CAN DISPLAY IT??? /* 
?> 

ответ

3

Вы должны выход величина, например, с echo:

echo $x; 

Я не уверен, что происходит в {toAdd: toAdd}. Я знаю, что одна из них является переменной в jquery. Является ли другое переменным именем переменной в PHP?

{toAdd:toAdd} является объектом литерал, который создает объект со свойством toAdd и значение переменной toAdd. jQuery берет этот объект, кодирует данные и отправляет их на сервер. Если вы выполняете запрос GET, данные будут добавлены в строку запроса URL-адреса. В запросе POST данные будут закодированы таким же образом, но отправлены в тело запроса.
Таким образом, если предположить toAdd является 42, то кодированные данные будут выглядеть следующим образом:

toAdd=42 

В PHP вы можете либо получить доступ к данным с $_GET['toAdd'] или $_POST['toAdd'], в зависимости от используемого метода.

1

{toAdd:toAdd} - это данные, которые передаются на адрес.

Если первая часть является именем параметра, вторая часть - это значение, здесь это переменная, поэтому передается значение переменной.

Кроме того, в указанном случае значение переменной toAdd такое же, как от значения параметра каждого метода обработчика value, поэтому она может быть записана в виде

$.each(terms_array,function(key, value) { 
    $.post('contract_handler.php',{toAdd: value}, function(data){ 
     $('contractlist').append(data); 
    }); 

}); 
0

Существует нет большой разницы между $.post() и $.ajax(). $.post() и $.get() - это просто ярлыки для отправки базового запроса POST и GET.Кроме того, в вашем примере вы, вероятно, хотите использовать value для ваших данных POST на сервере.

$.post('contract_handler.php', {toAdd: value}, function (data) { 
    $('contractlist').append(data); 
}); 

такая же, как

$.ajax({ 
    type : 'POST', 
    url : 'contract_handler.php', 
    data : { 
     toAdd: value 
    }, 
    success: function (data) { 
     $('contractlist').append(data); 
    } 
}); 

То же самое касается $.get(). Если вам нужно только передать данные и только хотите получить обратный вызов успеха, $.post() для вас. Если вам требуется больше настроек, переключитесь на $.ajax().

Из того, что вы предоставили, вы должны вывести $x в свой php-скрипт, чтобы он был возвращен в вашей переменной данных. Учитывая более высокую практику программирования, я бы определенно рекомендовал JSON Encoding для ваших возвращаемых данных.

echo JSON_encode($x); 

Это позволяет передавать более конкретные данные обратно с данными возврата, и позволит вам сохранить какие-либо манипуляции DOM в JavaScript. Если я не в RESTful среды, как ваш пример показывает, я бы послать мои данные обратно в обертке, чтобы дать себе некоторые статусы успеха и сервер сообщения

$return = array(
    status : 1, 
    message : 'Successfully added', 
    data : $x 
); 
echo JSON_encode($return); 

Таким образом, в вашем успехе обратного вызова, вы можете проверить чтобы убедиться, что ошибок не было, и если они есть, у вас уже есть готовое к отображению сообщение сервера.

$.post('contract_handler.php', {toAdd: value}, function (response) { 
    if (response.status=== 1) { 
     // Server was successful, now do your thing 
     $('contractlist').append(data.data); 
    } 
    else { 
     // Server encountered an error, alert the user 
     /* 
      UI Error Handling Here 
     */ 

     // Throw console error for debugging while in development 
     console.error("Error " + response.status + ": " + response.message"); 
    } 
}); 

Надеюсь, это поможет вам.

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