jquery $ .post - JSON - правильный способ отправки / получения входных данных (только на стороне клиента) - два вопроса квест

StackOverflow https://stackoverflow.com/questions/3546661

  •  30-09-2019
  •  | 
  •  

Вопрос

Давайте представим, что у нас есть что-то вроде:

$.post('somescript.php', 'WHAT CAN WE PUT HERE?',
        function(replyData) {

1) по умолчанию третий аргумент Метод $ .post, прочитал реакцию xmlresponse? Итак, почему нам нужен этот аргумент «ReplyData»? Каковы причины, которые мы можем иметь для того, чтобы иметь этот аргумент?

2) то второй аргумент принимает данные, которые будут отправлены. Ok. Я хотел бы использовать JSON, однако я не уверен, что я должен использовать формат JSON на этом вторым аргументом или Нацените поле входной формы, который будет содержать эти данные?

Дополнительные примечания: данные будут приходить с входного поля, и мне нужно отправить его через запрос через $ .post ajax на сервер. Я собираюсь использовать JSON Encode и функции PHP JSON Decode.

Спасибо заранее, Mem

Это было полезно?

Решение

То replyData Аргумент содержит тело ответа, возвращаемого сервером, который затем вы можете манипулировать для отображения на своей странице, убедитесь, что сторона сервера успешно обработала данные и т. Д. Вам не нужно его использовать (например, если вы Не возвращайте никаких данных).

Данные, которые вы поставляете (в формате JSON), все равно должны быть в форме строки запроса, например, param=value. Отказ Значение также нужно правильно кодировать, используя encodeuricomponent ():

$.post('somescript.php', 'data='+encodeURIComponent(myJSON),
    function(replyData) {

Затем вы можете получить доступ к JSON в сценарии PHP через $ _Post. Суперглобал:

$data = json_decode($_POST['data']);

Однако JSON будет небольшой излишек для простого входного поля. Нередко использовать JSON вместо пар имени / значения для полей формы.

Другие советы

1) Третий аргумент - это функция обратного вызова. Если вы поставляете анонимную функцию, как в вашем образце, вам нужно назвать аргумент для доступа к нему. Если вы вернете структуру JSON, вы можете получить доступ к ReplyData.foo и т. Д.

2) Вы можете вытащить значения из своей формы и построить структуру JSON.

var data = {};
data.threadid = $(form).find('input[name=threadid]').val();
data.commentid = $(form).find('input[name=commentid]').val();

$.post('somescript.php', data, function(replyData) { alert(replyData.foo); } );

Я украл эту функцию от Drupal и зафиксировал конечную запятую на массивах и объектах, который вызвал Zend_json_server, чтобы бросать исключения.

    var toJson = function(v) {
  // typeof null == object so we check beforehand;
  if ( v == null ){
    return null;  
  }

  switch (typeof v) {
    case 'boolean':
      return v == true ? 'TRUE' : 'FALSE';
    case 'number':
      return v;
    case 'string':
      return '"'+ v +'"';
    case 'object':
      if ( !(v instanceof Array) ){
          var output = "{";
          for(i in v) {
            output = output + '"'+i+'"' + ":" + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "}"; // Fix the trailing comma error wich isn't officialy allowed.
      }else{
          var output = "[";
          for(i in v) {
            output = output + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "]"; // Fix the trailing comma error wich isn't officialy allowed.
      }
      return output;
    default:
      return null;
  }
}

Теперь просто кормите его своими данными, как это:

var myJsonString = toJson($('myform').serialize());

Wicch вернет json String рекурсивно, созданную из вашей переменной. Работает для большинства моих приложений.

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

'data='+encodeURIComponent(myJSON)

Я хочу только очистить, что на практике используется второй параметр $ .post в основном не как строка:

$.post('somescript.php', 'data='+encodeURIComponent(myJSON), ... );

Но как объект:

$.post('somescript.php', {data: myJSON}, ...);

Тогда jQuery Call. encodeURIComponent функция и построить строку 'data='+encodeURIComponent(myJSON) с уважением jquery.param () внутренне. Гораздо более важно понять, что иметь myJSON Вы должны создать эту строку JSON с уважением некоторых функций кодирования JSON из объекта, который содержит данные, которые вы хотите опубликовать. Так что код будет выглядит в практике, как следующее

$.post('somescript.php', { data: JSON.stringify(myObject) }, ...);

куда JSON.stringify Является ли функция JavaScript от json2.js, которую вы можете скачать бесплатно http://www.json.org/jshtml..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top