0

このJSONをPHPで使用できるようにするために、障害が発生した後、障害が発生しているので、誰かがここで私を助けてくれるかどうか疑問に思っています。

変数divisionsJSONにJSONが保存されています:

    var divisionsJSON = JSON.stringify(divisions);  


次に、.ajaxを使用して次のように投稿しようとします。

$.ajax({
     url: "divisions.php",
     type: "post",
     data: divisionsJSON,
     success: function(){
     alert("success");
       $("#result").html('submitted successfully');
     },
     error:function(){
      alert("failure");
      $("#result").html('there is error while submit');
     }   
     }); 

(これをSOに関する別の質問からコピーしましたが、HTMLにid = "result"が含まれていません-その部分を削除できると思います[削除が確認されました])

次に、私のdivisions.phpページには次のものが含まれています。

<?php 
    $url = "divisions.php";
    $json = file_get_contents($url);
    $json = utf8_encode($json);
    $elements = json_decode($json);
    var_dump($elements);
  ?>

PHP / ajaxの経験が浅いことと、これを機能させることへの欲求不満が相まって、さまざまなことを試してみました。これまでのところ、divisions.phpをロードすると、NULLになるか、何も得られませんでした。私の腸はそれがajaxの問題だと言っていますが、私はPHPに不慣れなので、自分のPHPが何かを取り戻すのに十分正しいとは言えませんvar_dump、print_r、echoを試しましたが、実際のP​​HP/JSONに関連するdivisions.phpには何も表示されません。ありとあらゆる助けをいただければ幸いです。

更新されたコードによる応答:

utf8行のない次のphpでNULLを取得し、utf8行に追加するとstring(0)""を取得します。

<?php
        $json = json_decode(file_get_contents('php://input'));
        $elements = utf8_encode($json);
        var_dump($elements);
?>

何か案は?

完全なphpページ用に編集:

<!DOCTYPE html>

<html lang="en">

<head>  
    <meta charset="utf-8">
    <title>untitled</title>
    <link rel="stylesheet" href="styles/reset.css" />
</head>

<body>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="underscore.js"></script>
<script type="text/javascript" src="application.js"></script>
<script type="text/javascript" src="divisions.js"></script>
<?php
        print_r($_POST);
?>
</body>
</html>

php、print_r($ _ POST);、json_decode($ _ POST);などで複数の行を試しましたが、他のSOやこのページで見ているものに基づいて多くのことを変更しています。 m本当にぼんやりしています。

編集:私が配列を作成することを意図したこのコードは、JSONを生成しませんか?JSONatmを使用しているようには見えないためです。

var divisions = [];
for (var i = 0; i < arr.length; i++) {
    if(arr[i].value != "N/A"){
    var obj = { "login": arr[i].login,
            "value": "http://www.value.net/index/" + arr[i].value};
    divisions.push(obj);}
4

2 に答える 2

2

まず第一に、JSON を扱うときの最善のアプローチは、できるだけそのままにしておくことです。壊れ物だと思ってください。あなたがそれに何をしても、それを壊す可能性があります。

そのことを念頭に置いて、stringify() を使用しないでください。実際には、JQuery がそれを検出して処理するため、使用する必要はありません (壊れやすいことがわかっているため)。

次に、$ajax() メソッドのオプション data: にオブジェクトを指定する必要があります。一般的には、次のようにします。

data: {mydata:divisionsJSON}

そうすれば、バックエンドの JSON にアクセスできます。

$json = json_decode($_POST['mydata']); 

または、divisions 配列の設定方法に応じて、オブジェクト データとして投稿することもできます: $_POST['divisions_key'] = divisions_value; しかし、それは後であらゆる種類の問題を引き起こし、フロントエンドをバックエンドにハードリンクします。これは非常に悪いことです (ほとんどの場合、例外は以下にあります)。

また、JSON 応答が必要な場合は、元の呼び出しで dataType: 'JSON' オプションを使用してそれを指定し、JQuery が適切に処理できるようにする必要があります。

$.ajax({
 url: "divisions.php",
 type: "post",
 data: {mydata:divisions},
 success: function(response){
   $("#result").html(response.message);
 },
 error:function(response){
  $("#result").html(response.message);
 }   
 });

しかし、先に進む前に、JS の除算変数が厄介です。それはどこから供給されたものですか?ひょっとして形ですか?その場合、次のように serialize() を使用できます。

var divisions = $('#myform').serialize();

これにより、キーがフォーム フィールドの名前で、値が (明らかに) フィールドの値であるキー=>値のペアが作成されます。通常どおり、PHP の値にアクセスできます。

配列がどのように構造化されているかについての前の質問を考慮すると、これはデータをオブジェクトとしてポストする許容されるケースです。それがフォームの場合、フォーム構造は必要に応じてバックエンドにリンクされるため、 data: オプションでオブジェクトを直接使用しても問題ありません。それは「放っておけ」という最初のコンセプトそのものです。ここでの最後のケースは、そのオブジェクトを完全にそのままにしておきます。DOM を離れてからハンドラーが受け取るまで、100% の確率でオブジェクトです。

于 2013-02-25T20:48:49.110 に答える
1

@slamborne がコメントで述べたように、正しい呼び出しはjson_decode(file_get_contents('php://input')).

あなたの呼び出しが実際に行っているのは、divisions.php への別の呼び出しです。これが、NULL が返される理由です (divisions.php は何も出力しないため、返されるデータがありません)。

于 2013-02-25T19:50:20.390 に答える