Как отправить несколько полей данных через Ajax? [закрыто]

136

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

$(document).ready(function() {
  $("#btnSubmit").click(function()  {
    var status = $("#activitymessage").val();
    var name = "Ronny";
    $.ajax({
      type: "POST",
      url: "ajax/activity_save.php",
      **data: "status="+status+"name="+name"**,
      success: function(msg) {...

Я перепробовал все виды вещей:

data: {status: status, name: name},

Или даже такие вещи только для тестирования:

data: "status=testing&name=ronny",

Но что бы я ни пытался, я ничего не получаю в моем, activity_save.phpтаким образом, ничего в моем SQL.

Итак, каков правильный синтаксис для добавления большего количества строк данных в мой вызов AJAX?

deadconversations
источник
Обе вторичные формы обработки входных данных являются действительными. Как вы получаете доступ к этому на стороне PHP? Вы можете рассмотреть HTTP сниффер (Fiddler на ПК, что-то вроде HTTPScoop на Mac), который покажет вам, что движется по проводам.
Джон Грин
Я бы предложил использовать firebug / chrome для отладки ваших постовых данных. Убедитесь, что вы получаете HTTP Code 200 и что данные формы публикуются по вашему мнению, так и должно быть. Если с почтовыми данными все выглядит правильно, я бы начал пытаться отлаживать ваш PHP-код на стороне сервера.
Кайл Роджерс
Использование firebug действительно помогло, совершенно забыл проверить мою страницу с ним. : /
deadconversations
Какая польза от ** перед и в конце параметра данных?
Heinkasner
1
@heinkasner, я думаю, ** только для того, чтобы показать читателю, какую строку автор хотел бы подчеркнуть. ** необходимо удалить, когда код будет готов к сохранению в файл!
Марк

Ответы:

256

Правильный синтаксис:

data: {status: status, name: name},

Как указано здесь: http://api.jquery.com/jQuery.ajax/

Так что, если это не сработает, я бы предупредил эти переменные, чтобы убедиться, что они имеют значения.

Avitus
источник
4
Он указывает, в частности , в вопросе: «Я пробовал все виды материала: data: {status: status, name: name},»
Рыбаковым
20
Я просто указывал на правильный синтаксис и говорил, что проблема должна быть в чем-то другом, а не в синтаксисе
Авит
3
Кажется, мой синтаксис был правильным, я считаю, что допустил очень глупую ошибку SQL.
Беседы
2
Re: синтаксис, обратите внимание, что имя ключа является '-', например data: { site-name: "StackOverflow" }, не будет работать.
Мой
Из документов "Параметр data может содержать либо строку запроса формы key1=value1&key2=value2, либо объект формы {key1: 'value1', key2: 'value2'}. Если используется последняя форма, данные перед отправкой преобразуются в строку запроса с помощью jQuery.param (). "
Джей Бланшар
32

Вы можете отправить данные через JSON или через обычный POST, вот пример для JSON.

 var value1 = 1;
 var value2 = 2;
 var value3 = 3;   
 $.ajax({
      type: "POST",
      contentType: "application/json; charset=utf-8",
      url: "yoururlhere",
      data: { data1: value1, data2: value2, data3: value3 },
      success: function (result) {
           // do something here
      }
 });

Если вы хотите использовать его через обычный пост, попробуйте это

 $.ajax({
      type: "POST",
      url: $('form').attr("action"),   
      data: $('#form0').serialize(),
      success: function (result) {
         // do something here
      }
 });
к-DEV
источник
.serialize()не определен!
Амирхосейн Мехрварзи
9

Попробуйте с кавычками:

data: {"status": status, "name": name}

Это должно работать нормально.

Alberthoven
источник
4
+1. Кстати, это на самом деле данные: {status: "status", name: "name"} api.jquery.com/jquery.ajax
Амир,
6
var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';

после этого вы можете сделать как:

var new_countries = countries.join(',')

после:

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: new_countries,
    ...

Эта вещь работает как формат строки JSON.

Шахин
источник
Это решение работало для меня при попытке передать массив через ajax. Объединение этого в строку было решением. Спасибо!
Брайан Пауэлл
3

Этот работает для меня.

Вот мой PHP:

<div id="pageContent">
  <?php
    while($row = mysqli_fetch_assoc($stmt)) {
  ?>
  <br/>
  <input id="vendorName_" name="vendorName_<?php echo $row["id"]; ?>" value='<?php echo $row["vendorName"]; ?>'>
  <input id="owner_" name="owner_<?php echo $row["id"]; ?>" value='<?php echo $row["owner"]; ?>'>
  <input id="city_" name="city_<?php echo $row["id"]; ?>" value='<?php echo $row["city"]; ?>'>
  <button id="btn_update_<?php echo $row["id"]; ?>">Update</button>
  <button id="btn_delete_<?php echo $row["id"]; ?>">Delete</button>
  <?php
    }
  ?>
  </br></br>
  <input id = "vendorName_new" value="">
  <input id = "owner_new" value="">
  <input id = "city_new" value="">
  <button id = "addNewVendor" type="submit">+ New Vendor</button>
</div>

Вот мой jQuery с использованием AJAX:

$("#addNewVendor").click(function() {
  alert();
  $.ajax({
    type: "POST",
    url: "create.php",
    data: {vendorName: $("#vendorName_new").val(), owner: $("#owner_new").val(), city: $("#city_new").val()},
    success: function(){
      $(this).hide();
      $('div.success').fadeIn();
      showUsers()
    }
  });
});
TheGreenGentleman
источник
2

Я новичок в ajax, но я думаю, что для использования этого типа данных «data: {status: status, name: name}» должен быть установлен JSON, т.е.

$.ajax({
type: "POST",
dataType: "json",
url: "ajax/activity_save.php",
data: {status: status, name: name},
Shan
источник
3
Добро пожаловать в переполнение стека. dataTypeответ типа контента, который вы ожидаете получить от сервера, а не тот, который вы отправляете. Данные, которые вы отправляете, всегда будут преобразованы в foo=bar&bar=foo.
h2ooooooo
1

Использовать это

data: '{"username":"' + username + '"}',

Я стараюсь много синтаксиса работать с laravel, он работает для меня для laravel 4.2 + ajax.

Канин Пеанвириякулькит
источник
1

Попробуй это:

$(document).ready(function() {
  $("#btnSubmit").click(function() {
    var status = $("#activitymessage").val();
    var name = "Ronny";
    $.ajax({
      type: "POST",
      url: "ajax/activity_save.php",
      data: {'status': status, 'name': name},
        success: function(msg) {...
user4184048
источник
1

Я новичок в AJAX, и я попробовал это, и это работает хорошо.

function q1mrks(country,m) {
  // alert("hellow");
  if (country.length==0) {
    //alert("hellow");
    document.getElementById("q1mrks").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("q1mrks").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","../location/cal_marks.php?q1mrks="+country+"&marks="+m,true);
  //mygetrequest.open("GET", "basicform.php?name="+namevalue+"&age="+agevalue, true)
  xmlhttp.send();
}
DDA
источник
1

Попробуй использовать :

$.ajax({
    type: "GET",
    url: "something.php",
    data: { "b": data1, "c": data2 },   
    dataType: "html",
    beforeSend: function() {},
    error: function() {
        alert("Error");
    },
    success: function(data) {                                                    
        $("#result").empty();
        $("#result").append(data);
    }
});
user8161624
источник
1
Может быть, какое-то объяснение?
cs95
0

Вот что работает для меня после 2 дней царапин на голове; почему я не смог заставить параметр AJaX 'data' отправлять два ключа / значения (включая переменную, содержащую необработанные данные изображения), было загадкой, но, похоже, именно для этого была написана функция jQuery.param () ;

создайте массив параметров с вашими переменными без кавычек:

var params = { key_name1: var_1, key_name2: var_2  }; // etc.

var ser_data = jQuery.param( params );   // arbitrary variable name

Используйте переменную ser_data в качестве значения данных;

      $.ajax({
       type: 'POST',
       url: '../php_handler_url.php',
       data: ser_data,
    }).success(function(response) {
       alert(response);
    });

Документация находится здесь: https://api.jquery.com/jQuery.param/

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

big_lion
источник