我无法获得基本的ajax POST工作。在我遇到使用jquery .click等问题之后,我切换到了onclick。只是想知道我是否犯了一些明显的错误或者是什么。如果没有明显的错误,可能是apache的东西?这里没有太多的经验,所以任何帮助将不胜感激。
以下是函数的链接:
<a href="markerpages.php" onclick="postData()">click this for php page</a>
这是功能:
function postData() {
console.log("outside ajax is working");
$.ajax({
type: "POST",
url: "/markerpages.php",
data: {
source1: "some text",
source2: "some text 2"},
success: function (data) {
console.log("inside ajax is working");
},
error: function () {
console.log("ajax post failed")
}
});
这是我在php网页上的内容:
<?php
if (isset($_POST['source1']))
$src1 = $_POST['source1'];
else $src1 = "post data not obtained";
echo $src1;
echo "<pre>" . print_r($_REQUEST, 1) . "</pre>";
print_r($_POST);
var_dump($_POST);
var_dump($_POST);die;
?>
我没有在firebug中返回错误,我得到的是我放在ajax和外部的日志语句,只是没有在PHP页面上获得空数组。 真诚的感谢您的帮助。
答案 0 :(得分:2)
您正在使用锚标记将用户发送到页面。如果这样做,所有帖子数据都将丢失。您需要使用#
替换锚标记中的网址,以确保用户留在页面上:
<a href="#" onclick="postData()">click this for php page</a>
答案 1 :(得分:1)
首先,您应该在js函数中放置return false;
,这样做不会有任何重定向,
在开发者网络中检查您的请求,如果网址是否正确以及您是否在ajax帖子中检索任何错误。
答案 2 :(得分:0)
点击该链接时,系统会调用postData()
,但浏览器正在加载<a href>
中指定的网址。您可以执行以下三种操作之一:
在postData()函数的顶部添加以下行:event.preventDefault()
。这将停止原始事件点击操作,并且是首选方法。
更改onclick
属性并添加return false
以防止网址点击行为。例如:onclick="postData(); return false;
将<a href="/markerpages.php">
更改为<a href="#">
。但这不是一个好方法,因为页面的网址将更改为mypage.htm#
。
另一个有用的调试技巧:您可以输出data
变量(PHP脚本中返回的值),如下所示:console.log(data);
。
既然您似乎正在构建一个最终将值从服务器传递回前端的表单,我建议您查看这篇文章:Pass a PHP Array to Javascript as JSON using AJAX and json_encode()