Ajax üzerinden birden çok veri alanı nasıl gönderilir? [kapalı]


136

Sıkıştım: AJAX kullanarak bir form göndermeye çalışıyorum, ancak AJAX çağrımla birden çok veri alanı göndermenin bir yolunu bulamıyorum.

$(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) {...

Her türlü şeyi denedim:

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

Ya da sadece test amacıyla böyle şeyler:

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

Ama ne denesem deneyim, activity_save.phpSQL'imde hiçbir şey almıyorum.

Peki, AJAX çağrıma daha fazla veri satırı koymak için doğru sözdizimi nedir?


Girdi verilerini işlemenin ikincil formlarının her ikisi de geçerlidir. PHP tarafında buna nasıl erişiyorsunuz? Kabloda tam olarak neyin hareket ettiğini gösteren bir HTTP dinleyicisi (PC'de Fiddler, Mac'te HTTPScoop gibi bir şey) düşünebilirsiniz.
John Green

Yayın verilerinizde hata ayıklamak için kundakçı / krom kullanmanızı öneririm. HTTP Kodu 200 aldığınızdan ve form verilerinin sizin düşünmeniz gerektiği şekilde yayınlandığından emin olun. Her şey yazı verileri ile doğru görünüyorsa, ben PHP sunucu tarafı kodu hata ayıklama denemeye başlar.
Kyle Rogers

Firebug kullanmak gerçekten yardımcı oldu, tamamen sayfamı onunla kontrol etmeyi unuttum. : /
deadconversations

Veri parametresinin önünde ve sonunda ** kullanımı nedir?
heinkasner

1
@heinkasner, bence ** okuyucuya yazarın hangi çizgiyi vurgulamak istediğini göstermek için orada. Kod dosyaya kaydedilmeye hazır olduğunda ** çıkarılmalıdır!
Mark

Yanıtlar:


256

Doğru sözdizimi:

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

Burada belirtildiği gibi: http://api.jquery.com/jQuery.ajax/

Bu işe yaramazsa, değerlere sahip olduklarından emin olmak için bu değişkenleri uyarırdım.


4
O özellikle şu soruya dikkat çekiyor: "Her türlü şeyi denedim: data: {status: status, name: name},"
Ry-

20
Sadece doğru sözdizimini gösteriyordum ve sorunun sözdizimi değil başka bir şey olması gerektiğini söylüyordum
Avitus

3
Benim sözdizim doğru gibi görünüyor, çok aptalca bir SQL hatası yaptığımı düşünüyorum.
görüşmeler

2
Re: sözdizimi, bir anahtar adının '-' olduğunu unutmayın, örneğin data: { site-name: "StackOverflow" }çalışmaz.
moey

Gönderen docs "veri seçeneği formun bir sorgu dizesi ya içerebilir key1=value1&key2=value2veya formun bir nesne {key1: 'value1', key2: 'value2'}. İkincisi formu kullanılırsa, veri gönderilmeden önce jQuery.param () kullanarak bir sorgu dizesi dönüştürülür. "
Jay Blanchard

32

JSON veya normal POST aracılığıyla veri gönderebilirsiniz, işte JSON için bir örnek.

 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
      }
 });

Normal posta yoluyla kullanmak istiyorsanız bunu deneyin

 $.ajax({
      type: "POST",
      url: $('form').attr("action"),   
      data: $('#form0').serialize(),
      success: function (result) {
         // do something here
      }
 });

.serialize()Tanımlanmadı!
Amirhossein Mehrvarzi


6
var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';

Bundan sonra şunları yapabilirsiniz:

var new_countries = countries.join(',')

sonra:

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

Bu şey JSON dize biçimi olarak çalışır.


Ajax üzerinden bir dizi geçirmeye çalışırken bu çözüm benim için çalıştı. Bir dize haline getirmek çözüm oldu. Teşekkürler!
Brian Powell


3

Bu benim için çalışıyor.

İşte benim 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>

AJAX kullanarak benim jQuery İşte:

$("#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()
    }
  });
});

2

Ben ajax acemi ama bu "veri: {status: status, name: name}" yöntemi veri türü JSON yani ayarlanması gerektiğini düşünüyorum

$.ajax({
type: "POST",
dataType: "json",
url: "ajax/activity_save.php",
data: {status: status, name: name},

3
Taşma yığınına hoş geldiniz. sunucudandataType almayı beklediğiniz içerik türü yanıtıdır - gönderdiğiniz şey değil. Gönderdiğiniz veriler her zaman dönüştürülecektir . foo=bar&bar=foo
h2ooooooo

1

Bunu kullan

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

Laravel ile çalışmak için bir çok sözdizimi deniyorum.


1

Bunu dene:

$(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) {...

1

AJAX için yeniyim ve bunu denedim ve iyi çalışıyor.

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();
}

1

Kullanmaya çalışmak :

$.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);
    }
});

1
Belki biraz açıklama?
cs95

0

İşte 2 gün kafa tırmalamadan sonra benim için işe yarayan; neden iki anahtar / değer (ham görüntü verileri içeren bir değişken dahil) göndermek için AJaX 'veri' ayarını alamadım bir gizem, ama jQuery.param () işlevi için yazılmış gibi görünüyor ;

tırnak işaretleri olmadan değişkenlerinizle bir params dizisi oluşturun:

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

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

Veri değeriniz olarak ser_data değişkenini kullanın;

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

Belgeler burada: https://api.jquery.com/jQuery.param/

Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.