jQuery投稿JSON


192

更新:var valueサーバーに渡したい

こんにちは、同じ古い、同じ古い... :)

と呼ばれるフォームと呼ばれる<form id="testForm" action="javascript:test()">コード領域があります<code id="testArea"></code>

このコードを使用して、データを文字列化し、コード領域に表示します。

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

このデータをJSONファイルに送信する必要があります。私はこのプロジェクトに取り組んできました:http : //ridegrab.com/profile_old/そしてSubmit Queryボタンを押すと、ページのヘッドが表示されます。

また、このスクリプトを使用してデータを送信します。

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

繰り返しますが、私が欲しいのは、そのJSONデータをサーバーに送信できることです。私のサーバーはupdate or POST適切な場所にあるデータに設定されています。


私はそれを動作させることができません:)私はそれらを一緒にまとめてそのデータをサーバーに送信する方法がわかりません...たとえ私datadata: value,...と置き換えても...?
Patrioticcow

まず、接続の問題ではないのですか?error関数を割り当てると、呼び出されますか?もしそうなら、どんなエラーで?
Wiseguy

1
1年以上経過していますが、その方法について@Patrioticcowの最新の質問に答えます。ajaxメソッドに送信した「成功」オプションが表示されますか?同じことを「エラー」で行います。「error:MyErrorHandlingFunction」または「error:function(error){[ここにエラー処理コード]}」のよう
vbullinger

回答:


218

'data'は文字列化されたJavaScriptオブジェクトである必要があります:

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

を送信するにはformData、に渡しますstringify

data: JSON.stringify(formData)

一部のサーバーではapplication/jsonコンテンツタイプも必要です。

contentType: 'application/json'

同様の質問に対するより詳細な回答もここにあります:JQuery Ajax Posting json to webservice


私は、これはあなたが後にしているものだと思う@tasos:stackoverflow.com/questions/5806971/...
カイルワイルド

ここで不正確さをエコーし​​ます。これは単純なシナリオでは問題なく機能しますが、URLエンコードされたメッセージは、特に配列の場合、非常に問題になる可能性があります。
FMM 2012

@FMMとJonas N-正解のために私の答えを更新する方法を理解するのを手伝ってくれませんか?jQueryドキュメント(ここでは:api.jquery.com/jQuery.post)の例では、JSオブジェクトまたは文字列のいずれかを投稿できるかのように見えるため、jQueryが必要な文字列のシリアル化をすべて処理すると確信しました。 。
カイルワイルド

Patrioticcow氏:「var値からjsonを送信したい場合」値が配列またはオブジェクトでない限り、これは有効なJSONではありません。
andsens

1
たとえば、データに以下のようなリストが含まれている場合にどうなるかを考えてみましょう{ foo: [1,2,3], bar: 'baz' }。これはfoo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(エスケープされていない)の形式でエンコードされfoo[]=1&foo[]=2&foo[]=3&bar=bazます。サーバーサイドで必要なものではない可能性があります。
FMM

270

あなたはこのようにJSONを投稿します

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

オブジェクトをsettings.dataとして渡すと、jQueryはそれをクエリパラメータに変換し、デフォルトでデータタイプapplication / x-www-form-urlencodedで送信します。charset = UTF-8、おそらくあなたが望むものではない


@ TimLovell-Smithはdata、どんな場合でもjQueryが文字列を処理しないため、違いはありません
Phil

2

この投稿リクエストをクロスドメインに送信する場合は、このリンクを確認してください。

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

サーバーがクロスサイトポストリクエストを受け入れていません。したがって、クロスサイトリクエストを許可するには、サーバー構成を変更する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.