Làm cách nào để gửi nhiều trường dữ liệu qua Ajax? [đóng cửa]


136

Tôi bị kẹt: Tôi đang cố gửi biểu mẫu bằng AJAX, nhưng tôi không thể tìm cách gửi nhiều trường dữ liệu qua cuộc gọi AJAX của mình.

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

Tôi đã thử tất cả các loại công cụ:

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

Hoặc thậm chí những thứ như thế này chỉ nhằm mục đích thử nghiệm:

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

Nhưng bất cứ điều gì tôi cố gắng, tôi không nhận được gì trong activity_save.phpSQL của mình.

Vậy, cú pháp chính xác để đặt nhiều dòng dữ liệu hơn trong cuộc gọi AJAX của tôi là gì?


Cả hai hình thức xử lý dữ liệu đầu vào thứ cấp đều hợp lệ. Làm thế nào bạn đang truy cập này về phía PHP? Bạn có thể xem xét một trình thám thính HTTP (Fiddler trên PC, một cái gì đó như HTTPScoop trên máy Mac), sẽ cho bạn thấy chính xác những gì đang di chuyển trên dây.
John Green

Tôi sẽ đề nghị sử dụng fireorms / chrome để gỡ lỗi dữ liệu bài đăng của bạn. Hãy chắc chắn rằng bạn đang nhận được Mã HTTP 200 và dữ liệu biểu mẫu đang được đăng theo ý kiến ​​của bạn. Nếu mọi thứ có vẻ chính xác với dữ liệu bài đăng, tôi sẽ bắt đầu thử gỡ lỗi mã phía máy chủ PHP của bạn.
Kyle Rogers

Sử dụng fireorms thực sự hữu ích, hoàn toàn quên mất việc kiểm tra trang của tôi với nó. : /
deadconversations

Việc sử dụng ** ở phía trước và ở cuối thông số dữ liệu là gì?
heinkasner

1
@heinkasner, tôi nghĩ ** chỉ ở đó để cho người đọc thấy dòng nào tác giả muốn nhấn mạnh. ** sẽ phải bị xóa khi mã sẵn sàng được lưu vào tệp!
Đánh dấu

Câu trả lời:


256

Cú pháp đúng là:

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

Như được chỉ định ở đây: http://api.jquery.com/jQuery.ajax/

Vì vậy, nếu điều đó không hiệu quả, tôi sẽ cảnh báo các biến đó để đảm bảo chúng có giá trị.


4
Ông chỉ ra cụ thể trong câu hỏi: "Tôi đã thử tất cả các loại công cụ: data: {status: status, name: name},"
Ry-

20
Tôi chỉ chỉ ra cú pháp chính xác và nói rằng vấn đề phải là một vấn đề khác không phải là cú pháp
Avitus

3
Có vẻ cú pháp của tôi là chính xác, tôi tin rằng tôi đã mắc một lỗi SQL rất ngu ngốc.
gian chết

2
Re: cú pháp, lưu ý rằng tên khóa là '-' ví dụ: data: { site-name: "StackOverflow" }sẽ không hoạt động.
moey

Từ các tài liệu "Tùy chọn dữ liệu có thể chứa chuỗi truy vấn của biểu mẫu key1=value1&key2=value2hoặc đối tượng của biểu mẫu {key1: 'value1', key2: 'value2'}. Nếu biểu mẫu sau được sử dụng, dữ liệu được chuyển đổi thành chuỗi truy vấn bằng jQuery.param () trước khi được gửi. "
Jay Blanchard

32

Bạn có thể gửi dữ liệu qua JSON hoặc qua POST bình thường, đây là một ví dụ cho 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
      }
 });

Nếu bạn muốn sử dụng nó thông qua bài viết bình thường hãy thử điều này

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

.serialize()không được xác định!
Amirhossein Mehrvarzi


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

sau đó bạn có thể làm như sau:

var new_countries = countries.join(',')

sau:

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

Điều này hoạt động như định dạng chuỗi JSON.


Giải pháp này hiệu quả với tôi khi cố gắng vượt qua một mảng trên ajax. Nối nó thành một chuỗi là giải pháp. Cảm ơn!
Brian Powell


3

Cái này làm việc cho tôi

Đây là PHP của tôi:

<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>

Đây là jQuery của tôi bằng 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()
    }
  });
});

2

Tôi là người mới bắt đầu tại ajax nhưng tôi nghĩ để sử dụng kiểu dữ liệu "data: {status: status, name: name}" này phải được đặt thành JSON tức là

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

3
Chào mừng bạn đến với ngăn xếp tràn. dataTypelà phản hồi loại nội dung mà bạn mong muốn nhận được từ máy chủ - không phải nội dung bạn đang gửi. Dữ liệu bạn đang gửi sẽ luôn được chuyển đổi thành foo=bar&bar=foo.
h2ooooooo

1

Dùng cái này

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

Tôi thử rất nhiều cú pháp để làm việc với laravel, nó hoạt động với tôi cho laravel 4.2 + ajax.


1

Thử cái này:

$(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

Tôi chưa quen với AJAX và tôi đã thử nó và nó hoạt động tốt.

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

Thử sử dụng :

$.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
Một số lời giải thích có lẽ?
cs95

0

Đây là những gì làm việc cho tôi sau 2 ngày gãi đầu; tại sao tôi không thể nhận cài đặt 'dữ liệu' AJaX để gửi hai khóa / giá trị (bao gồm một biến chứa dữ liệu hình ảnh thô) là một bí ẩn, nhưng dường như đó là hàm jQuery.param () được viết cho;

tạo một mảng params với các biến của bạn, không có dấu ngoặc kép:

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

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

Sử dụng biến ser_data làm giá trị dữ liệu của bạn;

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

Tài liệu có tại đây: https://api.jquery.com/jQuery.param/

Mong rằng sẽ giúp!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.