Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用AJAX传递JavaScript数组_Php_Javascript_Html_Ajax_Arrays - Fatal编程技术网

Php 使用AJAX传递JavaScript数组

Php 使用AJAX传递JavaScript数组,php,javascript,html,ajax,arrays,Php,Javascript,Html,Ajax,Arrays,我对ajax非常陌生,我试图在用户单击submit按钮时将我在javascript中创建的名为markers的数组传递到PHP页面。提交时,数组已存在并在范围内。下面的代码就是我们要做的。当我点击submit按钮时,我被发送到php页面,并打印“failed”(我代码的一部分),这意味着数组没有通过。我相信这个错误发生在ajax代码中,我不确定它来自哪里,非常感谢您的帮助 javascript/ajax内容: function submit_tour(){ var input = JSO

我对ajax非常陌生,我试图在用户单击submit按钮时将我在javascript中创建的名为markers的数组传递到PHP页面。提交时,数组已存在并在范围内。下面的代码就是我们要做的。当我点击submit按钮时,我被发送到php页面,并打印“failed”(我代码的一部分),这意味着数组没有通过。我相信这个错误发生在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>
当你发送

var input = JSON.stringify(markers);
标记没有任何价值

<input type="hidden" id="markers" name="markers">     // No value anywhere
//任何地方都没有值
那么它肯定是空的:)

您是否也从
$\u POST
中的值填充
$sent
变量?当您发送时,不会看到这种情况发生

var input = JSON.stringify(markers);
标记没有任何价值

<input type="hidden" id="markers" name="markers">     // No value anywhere
//任何地方都没有值
那么它肯定是空的:)


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

表单标记中不需要这种情况。代码正在提交表单,而不是运行JS


移除表单标签,或将其放入:submit_tour();改为在表单上的onsubmit中,并返回false。

表单标记中不需要此选项。代码正在提交表单,而不是运行JS


移除表单标签,或将其放入:submit_tour();在表单上输入onsubmit,并返回false。

需要指出的几点

首先,您需要在
submit\u tour()
函数中阻止默认的POST操作,否则将发生同步POST

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

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

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

这是因为只有表单编码的内容类型才会自动生成
$\u POST

需要指出几点

首先,您需要在
submit\u tour()
函数中阻止默认的POST操作,否则将发生同步POST

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

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

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

这是因为
$\u POST
仅为表单编码的内容类型自动生成。

无需将对象序列化为JSON字符串,jQuery.ajax方法将为您处理该问题。因此,您可以不使用数据:标记,而不使用特定的数据类型属性。我的下一个问题是“markers”的值是什么?如何填充
$sent
?不需要将对象序列化为JSON字符串,jQuery.ajax方法将为您处理。因此,您可以不使用数据:标记,而不使用特定的数据类型属性。我的下一个问题是“markers”的值是多少?如何填充
$sent
?数组不是空的,我也进行了测试。这就是为什么我知道它没有被传递。在
stringify
行之后,
input
变量的值是多少?它是数组的字符串值。我相信stringify会将数组转换为stringify。数组不是空的,我也为此进行了测试。这就是为什么我知道它没有被传递。在
stringify
行之后,
input
变量的值是多少?它是数组的字符串值。我相信stringify将数组转换成了stringify。我在上面稍微修改了我的HTML,这就是你的意思吗?我不认为这是错误的来源,因为它似乎正在执行函数,但数组没有进入php文件。“当我单击submit按钮时,我被发送到php页面,“failed”被打印出来,“这不应该发生。”。当您实际提交到PHP页面时,没有必要使用AJAX函数。当Mike正确地说“首先,您需要在submit_tour()函数中阻止默认的POST操作,否则将发生同步POST”时,这就是他所引用的内容。我在上面稍微更改了我的HTML,这是您的意思吗?我不认为这是错误的来源,因为它似乎正在执行函数,但数组没有进入php文件。“当我单击submit按钮时,我被发送到php页面,“failed”被打印出来,“这不应该发生。”。当您实际提交到PHP页面时,没有必要使用AJAX函数。当Mike正确地说“首先,您需要在submit_tour()函数中阻止默认的POST操作,否则将发生同步POST”时,这就是他所引用的内容