jQuery đăng JSON


192

cập nhật: Tôi muốn chuyển var valueđến máy chủ

xin chào, cùng cũ, như cũ ... :)

Tôi có một hình thức được gọi <form id="testForm" action="javascript:test()">và một khu vực mã được gọi là<code id="testArea"></code>

Tôi đang sử dụng mã này để xâu chuỗi và hiển thị dữ liệu trong vùng mã:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Điều tôi muốn là gửi dữ liệu này đến tệp JSON. Tôi đã làm việc trong dự án này: http://ridegrab.com/profile_old/ và nếu bạn nhấn Submit Querynút, bạn sẽ thấy phần đầu của trang được điền.

Ngoài ra tôi muốn sử dụng đoạn mã này để gửi dữ liệu:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Một lần nữa, tất cả những gì tôi muốn là có thể gửi dữ liệu JSON đó đến máy chủ. Máy chủ của tôi được thiết lập để update or POSTdữ liệu ở đúng nơi.


Tôi không thể làm cho nó hoạt động :) Tôi không biết làm thế nào để đặt chúng lại với nhau để gửi dữ liệu đó đến máy chủ ... ngay cả khi tôi thay thế databằng data: value,... !! ??
Yêu nước

Đầu tiên, bạn có chắc chắn đó không phải là vấn đề kết nối? Nếu bạn gán một errorchức năng, nó có được gọi không? Nếu vậy, với lỗi gì?
Wiseguy

1
Mặc dù đã hơn một năm tuổi, tôi sẽ trả lời câu hỏi mới nhất của @ Patrioticcow về cách thực hiện điều đó. Bạn thấy tùy chọn "thành công" mà bạn đã gửi vào phương thức ajax? Làm điều tương tự với "lỗi." Như trong "error: MyErrorHandlingFunction" hoặc "error: function (error) {[Mã xử lý lỗi tại đây]}"
vbullinger

Câu trả lời:


218

'dữ liệu' phải là một đối tượng JavaScript được xâu chuỗi:

data: JSON.stringify({ "userName": userName, "password" : password })

Để gửi của bạn formData, chuyển nó đến stringify:

data: JSON.stringify(formData)

Một số máy chủ cũng yêu cầu application/jsonloại nội dung:

contentType: 'application/json'

Cũng có một câu trả lời chi tiết hơn cho một câu hỏi tương tự ở đây: Jquery Ajax Đăng json lên webservice


@tasos Tôi nghĩ đây là những gì bạn đang theo đuổi: stackoverflow.com/questions/5806971/
Kyle Wild

Báo lại sự không chính xác ở đây; điều này sẽ hoạt động tốt đối với các kịch bản đơn giản, nhưng thông báo được mã hóa url có thể rất có vấn đề, đặc biệt là đối với các mảng nội dung.
FMM

@FMM và Jonas N - Các bạn có thể giúp tôi tìm ra cách cập nhật câu trả lời cho chính xác không? Các ví dụ trong các tài liệu jQuery (ở đây: api.jquery.com/jQuery.post ) làm cho nó xuất hiện như thể bạn có thể đăng một đối tượng JS hoặc một chuỗi, khiến tôi tin rằng jQuery sẽ xử lý tất cả các chuỗi tuần tự cần thiết .
Kyle Wild

Patrioticcow nói: "nếu tôi muốn gửi json từ giá trị var" trừ khi giá trị là một mảng hoặc một đối tượng thì đây không phải là JSON hợp lệ.
andsens

1
Xem xét những gì xảy ra khi dữ liệu của bạn chứa, ví dụ, một danh sách các thứ : { foo: [1,2,3], bar: 'baz' }. Điều này sẽ được mã hóa dưới dạng foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(không thoát, nó foo[]=1&foo[]=2&foo[]=3&bar=baz). Có thể không phải những gì bạn muốn phía máy chủ.
FMM

270

Bạn đăng JSON như thế này

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

nếu bạn truyền một đối tượng là settings.data jQuery sẽ chuyển đổi nó thành các tham số truy vấn và theo mặc định gửi với kiểu dữ liệu application / x-www-form-urlencoding; bộ ký tự = UTF-8, có thể không phải là những gì bạn muốn


@ TimLovell-Smith sẽ không tạo ra sự khác biệt vì jQuery sẽ không xử lý một datachuỗi trong mọi trường hợp
Phil

2

Trong trường hợp bạn đang gửi yêu cầu bài đăng này đến một tên miền chéo, bạn nên kiểm tra liên kết này.

https://stackoverflow.com/a/1320708/969984

Máy chủ của bạn không chấp nhận yêu cầu bài đăng chéo trang. Vì vậy, cấu hình máy chủ cần được thay đổi để cho phép yêu cầu trang web chéo.

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.