2013-03-27 87 views
1

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

的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> 

映入它(在test_portal.php文件)的PHP:

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

没有必要将对象序列化为JSON字符串,jQuery.ajax方法将为您处理。所以你可以逃避数据:标记和没有特定的dataType属性。我的下一个问题是“标记”的价值是什么? – 2013-03-27 17:20:31

+0

你如何填充'$ sent'? – 2013-03-27 17:20:42

回答

1

当您发送

var input = JSON.stringify(markers); 

和标记没有价值

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

然后,它必将成为空:)

而且你从$_POST值填充您的$sent变量?没有看到发生这种情况

+0

该数组不为空,我也为此进行了测试。这就是为什么我知道它没有得到通过。 – intA 2013-03-27 17:24:10

+0

'stringify'后的'input'变量的值是多少? – 2013-03-27 17:27:18

+0

它是数组的字符串值。我相信stringify把数组变成一个字符串 – intA 2013-03-27 17:33:22

0

你不需要这个表单标签。代码提交表单而不运行JS。

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

+0

我改变了我的HTML一点点,这是你的意思?我不认为这是错误来自哪里,因为它似乎在执行功能好,但数组没有得到的PHP文件。 – intA 2013-03-27 17:36:05

+0

“当我点击提交按钮时,我被发送到php页面并且”失败“被打印出来”这不应该发生。当您实际提交到PHP页面时,没有任何意义。这是Mike正确地说“首先,你需要阻止你的submit_tour()函数中的默认POST动作,否则同步POST将会发生。” – MasNotsram 2013-03-28 09:51:18

3

有几件事要指出。

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

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

第三,如果你实际上是在执行POST JSON到PHP和使用application/json它们将contentType,则需要通过访问这样的原始输入来获得在PHP中JSON数据:

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

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