【问题标题】:cannot pass a javascript object to php via ajax无法通过 ajax 将 javascript 对象传递给 php
【发布时间】:2015-11-17 16:54:34
【问题描述】:

我在 javascript 中创建了一个新数组,我从一个函数向它添加值索引,然后将数组传递给 ajaxCall 函数,如果我尝试将其转换为 json 并通过 ajax 将其发送到 php 文件,但变量 json 始终为空。我一直在阅读很多关于如何通过 ajax 发送 javascript 对象 json_encoded 的内容,看起来这是这样做的方法,但显然我还没有阅读足够多的内容,或者我错过了一些东西。无论如何,我是 javascript 的新手,任何帮助都将不胜感激。

    function createArray()
    {
        var advancedFormVars = new Array();
        advancedFormVars['checkbox1'] = document.getElementById('OfferID').value;  
        advancedFormVars['checkbox2'] =document.getElementById('offerName').value;

    AjaxCall(advancedFormVars);
    }
    function AjaxCall(advancedFormVars){
    var json = new Array();
    json = JSON.stringify(advancedFormVars); //in debuger it shows me this as content of json variable--> [] but advancedFormVars is not empty

$.ajax({
        url : 'AL_loadForm.php',
        type : 'POST',
        data : {
            json : json 
        },
        dataType:'json',
        success : function(data) {
            alert(data);
    }
...

【问题讨论】:

  • PHP 中的关联数组在 JavaScript 中是 object。将advancedFormVars 更改为 -> var advancedFormVars = {};
  • 你的意思是替换 var advancedFormVars = new Array();为 var advancedFormVars = {}; ??
  • 是的。顺便说一句,var json = new Array(); 不需要。当您在下一行中用JSON.stringify() 的结果覆盖数组时。删除该行并将var 添加到下一行 -> var json = JSON.stringify(...);
  • 非常感谢安德烈亚斯你是老板!!!

标签: javascript php jquery json ajax


【解决方案1】:

您正在尝试将您的数组用作哈希,因此未设置值..

而不是设置

var advancedFormVars = new Array();

尝试设置

var advancedFormVars = {};

例子

JS:

var advancedFormVars = {};
advancedFormVars['checkbox1'] = 'valueA';
advancedFormVars['checkbox2'] = 'valueB';

var json = JSON.stringify(advancedFormVars);

console.log(json); //{"checkbox1":"valueA","checkbox2":"valueB"}

PHP

<?php
$json = '{"checkbox1":"valueA","checkbox2":"valueB"}';
$obj = json_decode($json);
var_dump($obj);
/*
    object(stdClass)#1 (2) {
      ["checkbox1"]=>
        string(6) "valueA"
      ["checkbox2"]=>
        string(6) "valueB"
    }
*/
?>

【讨论】:

  • 和赋值的方式一样吗?这也能工作 ---> advancedFormVars['checkbox1'] = document.getElementById('OfferID').value;??
  • @user3033437 是的。看看ObjectWorking with object - (以防止阅读链接时混淆^^:var foo = new Object()var foo = {} 相同)
【解决方案2】:

如果您只有两个较小的参数,我会保持简单并发出 http get 请求。必要时对参数进行编码。

var url = "http://wherever.com/something.php?arg1=";
url += document.getElementById('OfferID').value;
url += "&arg2=" + document.getElementById('offerName').value;
httpGetAsync(url, returnMethod);

function httpGetAsync(theUrl, callback)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() { 
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        callback(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true); // true for asynchronous 
xmlHttp.send(null);
}

【讨论】:

  • nop,这只是示例代码,我有很多参数,这就是我使用数组的原因
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2017-03-02
  • 2018-02-09
相关资源
最近更新 更多