【发布时间】:2012-12-11 22:40:02
【问题描述】:
我正在使用 Jquery $.ajax 方法成功地进行 AJAX 调用,因为它发布到的文件正在被调用和执行。但是,没有发送 POST 数据。我要做的就是发送数据并让文件接收它;我不关心返回数据。
我尝试将其更改为 GET,但没有产生结果。我在收到的 URL 中传递了 GET 数据(显然,我猜)。我也尝试过更改我发送的数据类型......这些都没有让我知道我做错了什么。我也在这里浏览了许多具有类似标题的问题,但似乎没有任何东西可以解决这个问题。虽然我确信这很简单。
其他可能相关的变量:我正在使用 Knockout JS。我正在使用 .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 形式发送,那也是空的。我将 cmets 放在代码中进行解释。
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 数据有什么想法吗?我敢肯定这很傻。谢谢!
【问题讨论】:
-
您确实意识到您正在提醒您正在发送的相同数据,而不是您正在接收的数据?作为旁注,控制台可能比警报更适合读取 JSON。
-
是的,我愿意。我做了我知道该怎么做的事情,那就是确保我至少已经正确准备好要发送的数据。如果我认为我根本没有发送数据,那么我认为这个问题的措辞会完全不同!
-
在您选择的浏览器的开发工具中打开网络面板,并检查您是否可以看到正在发送的请求。在您考虑服务器端发生的事情之前,请确保它正在发送!
-
您根本没有从 PHP 文件中返回任何内容,您是否希望返回数据?
-
在您的 php 代码中,如果您希望 print_r 返回而不是 print,您必须使用第二个参数 TRUE。 php.net/manual/en/function.print-r.php
标签: jquery ajax json post knockout.js