首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Ajax将Javascript对象发送到PHP

通过Ajax将Javascript对象发送到PHP
EN

Stack Overflow用户
提问于 2011-08-04 14:37:22
回答 4查看 58.8K关注 0票数 22

我在失败中学习Ajax,但遇到了困难:

我有一个用Javascript编写的数组(如果重要的话,该数组根据用户选中的复选框来存储数字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对象?

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-04 15:04:29

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

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

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

代码语言:javascript
复制
var my_array = { ... };
var json = JSON.stringify( my_array );

在php中,你可以用json_decode解码这个字符串:

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

代码语言:javascript
复制
var_dump(json_decode($json));
票数 58
EN

Stack Overflow用户

发布于 2011-08-04 15:01:54

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

此外,我应该尝试使用

吗?

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

如果是这样的话,我如何通过ajax发送

对象?

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

票数 1
EN

Stack Overflow用户

发布于 2021-09-26 10:09:48

我发现这个问题对Javascript爱好者很有用。

发送一个javascript对象,不管是js数组还是js对象,你必须在把它放到服务器上进行解码和处理之前对设置进行字符串转换。

限定js对象:基于你的函数:

Javascript Array对象的大小写

代码语言:javascript
复制
let my_array = ["select1", "select2", "..."];
my_array = JSON.stringify(my_array);

Javascript对象对象的大小写

代码语言:javascript
复制
let my_obj = {
name: "Daniel",
age: 23,
location: "Nigeria"
}
my_obj = JSON.stringify(my_obj);

在点上,你可以把它推送到服务器,根据用例,你正在使用AJAX GET方法将你的字符串对象发送到服务器。

下面是完整的代码:

代码语言: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 (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
            document.getElementById('message').innerHTML = this.responseText;
            // if your returned response is in json, please, do ensure to parse the response before displaying
           // like this JSON.parse(this.responseText)
        }
    }
    let my_array = ["select1", "select2", "..."];
    my_array = JSON.stringify(my_array);
    var url = "create_amenities.php?my_json=" + my_array;
    xmlhttp.open("GET", url, true);
    xmlhttp.send();

}

下面是我从你的代码中注意到的:

您不需要再次在

  1. 对象内部调用xmlhttp,所需的只是xmlhttp的

我包含了保存要发送到服务器的数组对象的my_json参数。

现在,在服务器中,您需要捕获对象并将其转换为php可读对象。

代码语言:javascript
复制
$my_json = $_GET['my_json'];
$my_json = json_decode($my_json);

现在,您可以随心所欲地执行它,因为它现在已经成为一个完整的php数组。选取第一个数组选项的示例:

代码语言:javascript
复制
$first = $my_json[0];
echo json_encode($first) // hahaha, you echoed it for AJAX to display
// i used to json_encode() to convert from php object to a js readable object
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6937144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档