1

I'm using jquery ajax function. I noticed an issue when I post JSON data to the server.

The type of post data is JSON. So I added the code to specify what I sent was JSON.

contentType: "application/json".

I wrote below code:

var data = {"data": "mytestdata" };
var option = {
     url: 'Handler1.ashx',
     type: 'POST',
     dataType: 'html',
     success: function (result) {
         alert(result);
     },
     data: data,
     contentType: "application/json"
 };
 $.ajax(option);

At the server side, I used below code:

string s = context.Request["data"];

But the result s was null.

Logically,setting contentType="application/json" and posting json data are perfect. But it's false.

Also I tried code in php file:

echo $_POST["data"];

PHP says $_POST["data"] doesn't exist.

So I tried to remove the code -- contentType: "application/json".

Now,everything is OK.

But it confused me. Why needn't set contentType as json when we post the real json data?

4

2 に答える 2

2

コンテンツ タイプを指定しない場合は、必要はありませんcontentType: "application/json"。データは、$_GET または $_POST パラメーターを介してアクセスできる json.. から、http パラメーターで送信されるように変換されます。

ただし、json データのみを送信する場合は、サーバー側で次のコードを試してデータを取得できます。

<?php
$data = @file_get_contents('php://input');
print_r(json_decode($data));
?>
于 2013-01-10T02:54:01.377 に答える
0

JSONデータを送り返していませんでした。jQueryは、ajaxコンテンツタイプがJSONを受け入れるように設定されている場合、エラーと見なしますが、不正な形式のJSONが返送されます。

echo $_POST['data']「キャッチ可能な致命的なエラー:クラスstdClassのオブジェクトを文字列に変換できませんでした」という例外がスローされる可能性があります。これにより、実際に出力されます。これは有効なJSONではありません。

あなたがおそらくやりたいことはecho json_encode($_POST['data']);

于 2013-01-10T02:52:50.537 に答える