Как я могу отправить данные JSON на сервер - PullRequest
19 голосов
/ 03 декабря 2010

Хорошо, вот история:

У меня есть некоторые данные, которые нужно отправить на сервер, но они должны сначала превратиться в 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?

Ответы [ 7 ]

22 голосов
/ 04 января 2013
 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);
        }
    }
 });
3 голосов
/ 07 июня 2011

У меня была такая же проблема.Вы не можете отправить объект как «данные», вам нужно привести в соответствие объект.Попробуйте это вместо этого, с вашим строковым объектом:

$.ajax({
       url: url,
       type: 'POST',
       contentType:'application/json',
       data: '{
          name:"test",
          key:"foo",
          key2:"bar"
       }',
       dataType:'json'
});
2 голосов
/ 21 января 2014

Попробуйте: http://www.abeautifulsite.net/blog/2008/05/postjson-for-jquery/

Это намного короче:

$.post(url, data, function(response) {
    // Do something with the response
}, 'json');
0 голосов
/ 30 мая 2019

Существует много способов отправки данных JSON на сервер

1.Использование Ajax

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

2.Использование Curl

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

3.Использование потоков

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

4.Raw HTTP Post

Использование HTTP-клиента Zend Framework: 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/

0 голосов
/ 29 мая 2017

Я согласен, что данные должны быть преобразованы в строку JSON, не только для соответствия настройкам dataType и contentType, но, что более важно, для удовлетворения сервера.

data: JSON.stringify(data),
dataType:'json'
0 голосов
/ 07 января 2014

Также необходимо создать параметр и присвоить значение с помощью JSON.stringify

....
data: "jsonString="+JSON.stringify(data),
...
0 голосов
/ 03 декабря 2010
dataType: 'json',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...