通过Ajax将Javascript对象发送到PHP

时间:2011-08-04 06:37:22

标签: php javascript ajax arrays json

我正在通过失败来学习Ajax并且遇到了障碍:

我有一个数组(如果重要的话,数组是基于用户检查的复选框存储数字ID),这是用Javascript编写的。

我有一个在用户点击“保存”按钮时调用的函数。功能如下:

function createAmenities() {
    if (window.XMLHttpRequest) {
        //code for IE7+, Firefox, Chrome and Opera
        xmlhttp = new XMLHttpRequest();
    }
    else {
        //code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById('message').innerHTML = xmlhttp.responseText;
        }
    }

    var url = "create_amenities.php";

    xmlhttp.open("GET", url, true);

    xmlhttp.send();

}

我的问题是: 我可以在此函数中添加什么来将数组拉入我试图调用的php脚本('create_amenities.php')?

此外,我应该尝试使用JSON吗?如果是这样,我怎么能通过ajax发送JSON对象?

提前致谢。

3 个答案:

答案 0 :(得分:49)

如果你的数组有超过1维或者是一个关联数组,你应该使用JSON。

Json将完整的数组结构转换为字符串。 这个字符串可以很容易地发送到您的PHP应用程序并转回到PHP数组。

有关json的更多信息:http://www.json.org/js.html

var my_array = { ... };
var json = JSON.stringify( my_array );

在php中,您可以使用json_decode解码字符串:

http://www.php.net/manual/en/function.json-decode.php

var_dump(json_decode($json));

答案 1 :(得分:1)

遍历数组并每次将encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'附加到查询字符串。

  

此外,我应该尝试使用JSON吗?

你可以,但这意味着在另一端解码JSON而不是让正常的表单处理来处理它。

  

如果是这样,我怎样才能通过ajax发送JSON对象?

no such thing as a JSON object。 JSON采用字符串的形式,您可以在查询字符串中包含字符串(只记得encodeURIComponent)。

答案 2 :(得分:-3)

首先,是的,不要手工编写ajax。您不太可能生成真正适用于所有浏览器的内容。

解决实际问题的最佳方法是将数组作为cgi参数提交。

如果复选框位于表单中,则您需要做的很少 - 只需提交表单

即可
 <form><input type=checkbox ...><input type=checkbox ...>
 $.post("test.php", $("#testform").serialize());

有关如何执行此操作的详细信息,请参阅http://api.jquery.com/jQuery.post/。    您的列表将在PHP中显示为数组。

或者用非常简单的东西来增加你自己的例子,做到这一点:

  url = url + '?checkboxes=' + checkboxes.join(',');

现在只需将它拆分到PHP中,你就可以恢复它了!