Jquery Ajax请求不发送帖子数据

时间:2012-12-11 22:40:02

标签: jquery ajax json post knockout.js

我正在使用Jquery $.ajax方法成功进行AJAX调用,因为它正在POST的文件被调用并执行。但是,没有发送POST数据。我想要做的就是发送数据并通过文件接收数据;我不关心返回数据。

我已经尝试将其更改为GET,但没有产生结果。我在收到的URL中传递了GET数据(显然,我猜)。我也试过改变我发送的数据类型......这些都没有给我任何关于我做错的想法。我也用类似的标题浏览了这里的众多问题,但似乎没有什么能解决这个问题。虽然我确信这很简单。

其他可能相关的变量:我正在使用Knockout JS。我正在使用.htaccess重定向在/ public文件夹中创建单个入口点。

不用多说,这是代码:

page.html中

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

如果你不熟悉KOJS,它基本上只是在你点击它时调用保存功能。我很确定这是正常的。

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数据的任何想法?我确定这是愚蠢的事。谢谢!

1 个答案:

答案 0 :(得分:4)

您的问题是您将data设置为JSON字符串。根据文档,jQuery不会处理字符串数据,只会处理对象http://api.jquery.com/jQuery.ajax/

而是使用ko.toJS来获得一个干净的JS对象,这应该让你走在正确的道路上。

[编辑]

我刚刚注意到你也在设置contentType ...为了工作,你将无法使用$_POST var。相反,您需要从file_get_contents("php://input")中获取“应该”为您提供原始JSON字符串的数据。从那里你应该能够使用PHP的json_decode将它变成一个真正的PHP对象。