【问题标题】:Passing JavaScript array using AJAX使用 AJAX 传递 JavaScript 数组
【发布时间】:2013-03-17 21:49:39
【问题描述】:

我对 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';
}

【问题讨论】:

  • 无需将对象序列化为 JSON 字符串,jQuery.ajax 方法将为您处理。所以你可以摆脱 data: 标记和没有特定的 dataType 属性。我的下一个问题是“标记”的价值是什么?
  • 你如何填充$sent

标签: php javascript html ajax arrays


【解决方案1】:

有几点需要指出。

首先,您需要在 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 仅针对表单编码的内容类型自动生成。

【讨论】:

    【解决方案2】:

    发送时

    var input = JSON.stringify(markers);
    

    而且标记没有价值

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

    那它肯定是 Null :)

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

    【讨论】:

    • 数组不为空,我也测试过。这就是为什么我知道它没有通过。
    • stringify 行后面的input 变量的值是多少?
    • 是数组的字符串值。我相信 stringify 将数组变成字符串
    【解决方案3】:

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

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

    【讨论】:

    • 我把上面的 HTML 改了一点,你是这个意思吗?我认为这不是错误的来源,因为它似乎可以正常执行函数,但数组没有到达 php 文件。
    • “当我单击提交按钮时,我会被发送到 php 页面并打印“失败””这不应该发生。当您实际提交到 PHP 页面时,拥有 AJAX 功能是没有意义的。这就是 Mike 在正确地说“首先,您需要阻止 submit_tour() 函数中的默认 POST 操作,否则会发生同步 POST”时所指的内容。
    猜你喜欢
    • 1970-01-01
    • 2014-06-21
    • 2021-02-10
    • 1970-01-01
    • 2019-12-24
    • 2013-08-23
    • 2011-11-07
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多