2

POST先のファイルが呼び出されて実行されているという点で、Jquery$.ajaxメソッドを使用してAJAX呼び出しを正常に行っています。ただし、POSTデータは送信されていません。私がやりたいのは、データを送信してファイルで受信することだけです。データを返すことは気にしません。

GETに変更してみましたが、結果が得られませんでした。受信したURLでGETデータを渡しました(もちろんそうですね)。また、送信するデータ型を変更しようとしました...これは、私が間違っていることについてのアイデアを私に与えてくれませんでした。同様のタイトルでここにある多数の質問も閲覧しましたが、この問題を解決するものは何もなかったようです。確かに簡単なことですが。

関連する可能性のあるその他の変数:KnockoutJSを使用しています。.htaccessリダイレクトを使用して、/publicフォルダーに単一のエントリポイントを作成しています。

そして、これ以上苦労することなく、ここにコードがあります:

page.html

<button data-bind="click: save">Save</button>

KOJSに慣れていない場合は、基本的に、クリックしたときに関数saveを呼び出すだけです。これは正しく機能していると確信しています。

models.js

self.save = function() {
    var jsonData = ko.toJSON(self.tasks);
    $.ajax("http://test.local.com/js/post.php", {
        data: jsonData,
        type: "post", contentType: "application/json",
        success: function(result) { alert(jsonData) }
    });
};

そのアラートは、次のような適切にフォーマットされたJSONオブジェクトを提供します。

[{"title": "Clean up the dog"},{"title": "Warm up the old pasta"}]

それは投稿ファイルだと思いますが、私のエラーはどこにありますか?$_POST配列は空です。また、GETとして送信するように変更すると、それも空になります。私は物事を説明するコードにコメントを入れました。

post.php

if (isset($_POST)) {
  //It does get inside this if. That's good at least, right?

  $my_file = 'file.txt';
  $handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file);
  //It will make this file.

  fwrite($handle, print_r($_POST));
  //Prints "1" without the quotes


  foreach ($_POST as $key => $value) {
    fwrite($handle, 'your data: '.$value.'; ');
  }
  //Prints nothing
}

これがPOSTデータを送信しない理由について何か考えはありますか?ばかげていると思います。ありがとう!

4

1 に答える 1

4

問題はdata、JSON文字列として設定していることです。ドキュメントによると、jQueryは文字列データを処理せず、オブジェクトのみを処理しますhttp://api.jquery.com/jQuery.ajax/

代わりko.toJSに、クリーンなJSオブジェクトを取得するために使用すると、正しいパスに進むことができます。

[編集]

$_POSTcontentTypeも設定していることに気づきました...それが機能するためには、 varを使用できません。file_get_contents("php://input")代わりに、生のJSON文字列を提供する「はず」からデータを取得する必要があります。json_decodeそこから、PHPを使用して真のPHPオブジェクトに変換できるはずです。

于 2012-12-11T22:50:06.997 に答える