さて、ここに話があります:
サーバーに送信する必要があるデータがありますが、最初にJSON dataTypeに変換する必要があります。
私はそのようなajax呼び出しを行いました:
$.ajax({
url: url, // the url I want to post to.
type: 'POST',
contenttype:'application/json; charset=utf-8',
beforeSend: //some HTTP basic auth stuff
data: {
name:'test',
key:'foo',
key2:'bar'
},
dataType:'JSON'
});
基本的に、私がサーバーに送信するデータは次のとおりであると想定しています:
[name:test,key:foo,key2:bar]
しかし、私が得たのは:
name=test&key=foo&key2=bar
何が欠けていましたか?これらのデータをJSONに取り込むにはどうすればよいですか?
var data = {'bob':'foo','paul':'dog'};
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
data: JSON.stringify(data),
dataType:'json'
});
/ **追加** /
上記は、サーバーからの応答に対しては何もしません。何かをする必要がある場合、サーバーが応答したときにコールバックが呼び出されます。
var data = {'bob':'foo','paul':'dog'};
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
data: JSON.stringify(data),
dataType:'json',
success: function(data){
//On ajax success do this
alert(data);
},
error: function(xhr, ajaxOptions, thrownError) {
//On error do this
if (xhr.status == 200) {
alert(ajaxOptions);
}
else {
alert(xhr.status);
alert(thrownError);
}
}
});
同じ問題がありました。オブジェクトを「データ」として送信することはできません。オブジェクトを文字列化する必要があります。オブジェクトを文字列化して、代わりにこれを試してください:
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
data: '{
name:"test",
key:"foo",
key2:"bar"
}',
dataType:'json'
});
これを試してください: http://www.abeautifulsite.net/blog/2008/05/postjson-for-jquery/
そのはるかに短い:
$.post(url, data, function(response) {
// Do something with the response
}, 'json');
JSONデータをサーバーに送信するには多くの方法があります
var data = <?php echo json_encode($data) ?>;
var url = '<?php echo $url ?>';
jQuery.ajax({
type: "POST",
url: url,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
var jsonObj = jQuery.parseJSON(data);
alert(jsonObj.encPassword);
},
failure: function(errorMsg) {
alert(errorMsg);
}
});
<?php
$content = json_encode($data);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //curl error SSL certificate problem, verify that the CA cert is OK
$result = curl_exec($curl);
$response = json_decode($result);
var_dump($response);
curl_close($curl);
?>
<?php
$options = array(
'http' => array(
'method' => 'POST',
'content' => json_encode( $data ),
'header'=> "Content-Type: application/json\r\n" .
"Accept: application/json\r\n"
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result);
var_dump($response);
Zend FrameworkのHTTPクライアントの使用: http://framework.zend.com/manual/en/zend.http.client.advanced.html#zend.http.client.raw_post_data
$json = json_encode($data);
$client = new Zend_Http_Client($url);
$client->setRawData($json, 'application/json')->request('POST');
var_dump($client->request()->getBody());
出典:- https://blog.magepsycho.com/sending-json-data-remote-server/
また、必要に応じてパラメーターを作成し、JSON.stringifyで値を割り当てることができます
....
data: "jsonString="+JSON.stringify(data),
...
dataType
およびcontentType
設定に同意するだけでなく、サーバーを満足させるために、データをJSON文字列に変換する必要があることに同意します。
data: JSON.stringify(data),
dataType:'json'