1

我对 ajax 很陌生,当用户单击提交按钮时,我正在尝试将我在 javascript 中创建的称为标记的数组传递给 PHP 页面。在提交时,数组存在并且在范围内。下面的代码就是试图做到这一点。当我单击提交按钮时,我被发送到 php 页面并打印“失败”(我的代码的一部分),这意味着数组未通过。我相信错误发生在 ajax 代码中,我不确定它来自哪里,非常感谢任何帮助!

javascript/ajax 的东西:

function submit_tour(){
    var input = JSON.stringify(markers);
    //var input = $(this).serialize();
    var sent = $.ajax({
            type: "POST",
            data: input,
            dataType: 'JSON',
            url: "test_portal2.php"
            }).done(function() {window.alert("done");})
            .fail(function() {window.alert("failed");});
    window.alert("" + input);
}

应该发送数组的 HTML 按钮:

<form name="toursubmit" action="test_portal2.php" onsubmit="submit_tour()">
<input type="submit" value="Submit">
</form>

捕获它的 PHP(在 test_portal.php 文件中):

$ans = json_decode($sent);
echo $ans;
if ($ans != NULL){
    echo "works";
    echo $ans;
}
else {
    echo 'failed';
}
4

3 回答 3

3

有几点需要指出。

首先,您需要阻止submit_tour()函数中的默认 POST 操作,否则会发生同步 POST。

其次,您需要在 AJAX 调用中将 contentType 值指定为application/json.

第三,如果您实际上是在将 JSON 发布到 PHP 并application/json用作 ContentType,那么您将需要通过访问原始输入来获取 PHP 中的 JSON 数据,如下所示:

$json = file_get_contents('php://input');
$obj = json_decode($json);

这是因为$_POST仅针对表单编码的内容类型自动生成。

于 2013-03-27T17:24:47.767 回答
1

当你寄出

var input = JSON.stringify(markers);

并且标记没有价值

<input type="hidden" id="markers" name="markers">     // No value anywhere

那么它肯定会是 Null :)

您是否还$sent从 中的值填充变量$_POST?没有看到这种情况发生

于 2013-03-27T17:19:34.420 回答
0

您不需要在表单标签中使用它。代码正在提交表单而不是运行 JS。

删除表单标签,或者把这个:submit_tour(); 而是在表单上的 onsubmit 中,并返回 false。

于 2013-03-27T17:21:23.640 回答