草庐IT

javascript - 通过json_encode传递多个变量

coder 2024-04-13 原文

我现在有点把我的代码弄得一团糟,通常我会制作一个 PHP-AJAX 脚本并使用 json_encode 将一个变量传回 JS 脚本。这次我想用json_encode传递几个变量,可惜我不知道如何在JS中分隔值。

我的JS代码:

$('#submit').click(function(){

    // Storing the value into variables
    var content_page = $('#content-page').val();
    var content_url = 'action=saving&page='+content_page;

        // Starting the AJAX post form
        $.ajax({
                type: 'POST',
                url: 'handlers/content.handler.php',
                data: content_url,
                success: function(responseText)
                {
                    $.parseJSON(responseText); // Making the return value of the PHP handler reedable

                    alert(responseText.pageid)

                        if(responseText.indexOf(1) > -1)
                        {
                            noty({ text: 'U heeft geen pagina gekozen om te bewerken!' });
                        }
                        else if(responseText.indexOf(2) > -1)
                        {
                            noty({ text: 'U heeft geen geldige pagina gekozen!' }); 
                        }
                        else if(reponseText.indexOf(100) > -1)
                        {
                            noty({ text: 'Pagina is opgehaald' });
                        }
                }
            });
    return false;
});

我的 PHP 代码:

<?php
/* Dit bestand handeld gegevens af voor het bestand content in de map panel. Gegevens komen hier door heen via een JS bestand(content.handler.js...) en worden ook weer terug gestuurd. */
include_once '../includes/config.php';

    // Controleren of server contact maakt en geen persoon.
    if(isset($_POST['action']) && $_POST['action'] == 'saving')
    {
        $stringPage = trim($_POST['page']);
        $error = array();
        $bolean = false;

            # Prepared statement.
            $stmt = $mysqli->prepare('SELECT id,name,title,text FROM pages WHERE name = ?');
            $stmt->bind_param('s', $stringPage);
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($pageID, $pageName, $pageTitle, $pageText);
            $stmt->fetch();
            $intPage = $stmt->num_rows();
            $stmt->close();

    /* Controle */
        if(empty($stringPage))
        {
            $error[] = 1;
            $bolean = true;
        }
        if($intPage == 0)
        {
            $error[] = 2;
            $bolean = true;
        }

            if($bolean == false)
            {
                $error[] = 100;

            }


            header('Content-Type: application/json');
            $array = array($error, $pageID, $pageName, $pageTitle, $pageText);
            echo json_encode($array, JSON_FORCE_OBJECT);
    }
?>

所以所有的值都恢复得很好,所以这没有问题。我的问题是我把我想要的所有东西都放在一个数组中(不是最好的解决方案)并且不知道如何在 JS 中分开。我建议它类似于 response.pageid,但没有用。

最佳答案

您需要先解析 JSON 并分配给一个对象变量。我认为这是您错过的唯一一步。

此外,返回一个 json 编码的数组就好了。我一直这样做。您可以添加诸如“status=success”和“errormessage=someerror”之类的内容,因此它非常方便。

var obj = $.parseJSON(response);

所以在你的情况下,你在 php 中的数组中有值..所以让我们举个例子......

$myarray['fullname'] = 'john doe';
$myarray['userid'] = 777;
$myarray['isadmin'] = false;
$myarray['email'] = johndoe@gmail.com;

然后您的 ajax 脚本将响应发送回 javascript ...

echo json_encode($myarray);

javascript 在您的 ajax 成功函数中获取它...

success: function (data) {
    var responsedata = $.parseJSON(data);

    alert('Fullname: '+responsedata.fullname+' userid: '+responsedata.userid+' isadmin: '+responsedata.isadmin);  //etc etc

}

来自聊天

我在paste bin上看了你的代码

顺便说一句,用它来查看响应

console.dir(responsetext); //instead of alert

或者试试 firefox 做

alert(responsetext.toSource());

responsetext 本身是一个对象,不会发出任何警报

将响应文本视为像 php 中的数组,但不是使用 myarray['somekey'],而是使用 myobj.somekey

将错误分配更改为

error[1] , error[2], error[100]

代替error[]

您将错误传递给它,所以这是一个数组,您可以像以前一样使用 indexOf() 访问它,或者您可以使用 textresponse.error[1]

但您的问题是错误数组的键只是被分配为 0、1、2 等。

但你试图称它们为 1,2,100 ...

因此,通过添加这些数字而不是仅仅使用 error[],它现在可以在检查错误响应时找到正确的值。

关于javascript - 通过json_encode传递多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30058952/

有关javascript - 通过json_encode传递多个变量的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  5. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  6. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  7. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  8. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  9. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  10. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

随机推荐