0

構文エラーまたは概念エラーがあると思います。

JSON文字列をPHPファイルに渡す単純なAJAX呼び出しがあります。AJAX 呼び出しは次のようになります。

<script> 
  $(document).ready(function () { 
    $("#btn").click(function() { 

      var id = $('#id').val(); 
      var name = $('#name').val(); 
      var Address = $('#Address').val(); 

      $.ajax({ 
        url: "connection.php", 
        type: "POST", 
        data: { topost : "{id':'" + id + "','name':'" + name + "','Address':'" + Address + "'}"}, 
        datatype: "jsonp", 
        success: function (status) { 
          if (status.success == false) { 
            alert("Failure!"); 
          } else { 
            alert("Success!"); 
          } 
        }}); 
     }); 
  }); 
</script> 

これは、サーバー側の PHP ファイルの文字列を解析しようとしている方法です。

<?php 
  header('Content-type: application/json'); 
  $server = "localhost"; 
  $username = "root"; 
  $password = ""; 
  $database = "jqueryex"; 
  $con = mysql_connect($server, $username, $password); 
  if($con) { echo "Connected to database!"; } 
  else { echo "Could not connect!"; } 
  //or die ("Could not connect: " . mysql_error()); 

  mysql_select_db($database, $con); 
  $thedata= json_decode($_POST['topost']); 
  echo ($thedata); 
  mysql_close($con); 
?> 

私の質問は:

'undefined index topost'次の行でエラーが発生するのはなぜですか。

$thedata= json_decode($_POST['topost']);

topostは私のAJAXから来ていますよね?では、なぜ私のPHPで「未定義」なのですか?

4

4 に答える 4

1

私はここを飛んでいるだけで、これはまったく問題ではないかもしれませんが、Content-Type:application / jsonを使用すると、PHPは本体のjsonを自動的に解析しません。そのように指定された変数は、$_POST変数には表示されません。

本体を自分で解析する必要がありますが、これは思ったほど難しくはありません。このような単純なものは、json本体を_POST変数にインポートします。これは最も安全な実装ではないため、サニタイズせずにこのように使用することはお勧めしません。

$_POST=array_merge($_POST,json_decode(file_get_contents('php://input'),true));

それが役に立てば幸い。

于 2012-08-01T12:39:40.940 に答える
0

オブジェクトを正しく構造化してdataいない場合は、次のようになります。

data: {
    "id": id,
    "name": name,
    ... ect
}

あなたは文字列として渡しtopostていますが、それはオブジェクトでなければなりません

于 2012-07-10T14:30:54.173 に答える
0

2 つの問題:

  1. 引用符が一致しません (idオブジェクトのキーの開始引用符がありません)
  2. JSON では、識別子を"引用するために一重引用符ではなく二重引用符が必要です。'

これを試して:

data: {
  topost: '{"id":"'+id+'","name":"'+name+'","Address":"'+Address+'"}'
}, 

または、 JSON.stringify()を使用してオブジェクト リテラルをエンコードすることもできます。

data: {
  topost: JSON.stringify({id: id, name: name, Address: Address})
}, 

Douglas Crockfords JSON2.js ライブラリを使用して、この機能をネイティブでサポートしていないブラウザーに提供できます。

于 2012-07-10T14:33:43.423 に答える
0

これが問題の原因であるかどうかはわかりませんが、送信用のデータ オブジェクトを作成する方法を改善できます -

var id = $('#id').val(); 
var name = $('#name').val(); 
var Address = $('#Address').val();

var dataObj = {};
dataObj.id=id;
dataObj.name=name;
dataObj.Address=Address;

$.ajax({ 
  url: "connection.php", 
  type: "POST", 
  data: { 'topost' : dataObj },
  datatype: "jsonp", 
  ...
于 2012-07-10T14:34:05.250 に答える