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