【问题标题】:Passing a nested array from PHP to Java servlet将嵌套数组从 PHP 传递到 Java servlet
【发布时间】:2015-05-21 19:30:44
【问题描述】:

我有一个数组 $tag,我使用它来打印:

foreach($tags as $t) {
                echo $t['token'] . "/" . $t['tag'] .  " ";
        }

如何将此 $tag 传递给 Java servlet,以便在 Java 程序中我可以像在 PHP 脚本中一样使用 foreach$t['token']$t['tag'] 来使用它?

我假设这必须使用 POST 方法来完成,是否也可以使用 GET 方法?

更新
得到一个 json_array:

$js_array = json_encode($tags);
echo "var javascript_array = ". $js_array . ";\n";

返回:

var javascript_array = [{"token":"test","tag":"NN"},{"token":"1","tag":"NN"}];

我正在尝试使用以下方法将其传递给 servlet:

<script src="http://code.jquery.com/jquery-1.10.1.min.js">

$( document ).ready(function() {
    alert('ok');

                $.ajax({
                    url : "http://localhost:8080/first/SPARQL",
                    type: "POST",
                    data: $js_array,                  
                    dataType: "json", 
                    async: false,
                    success: function (){
                        alert( "succes");},
                        error: function(){
                            alert("false");
                        }
                });

});
</script>

但是,它既不返回“succes”也不返回“false”。它显示“确定”警报。 附言我正在通过 Eclipse 和 Tomcat 8 运行 java servlet。php 文件位于我的 Wamp localhost 上。我可以在浏览器中访问网址。
另外,似乎我不能在我用 PHP 制作的 javascript 中使用 $js_array,它说它没有设置。

更新:在 chrome 控制台中显示:

    XMLHttpRequest cannot load http://localhost:8080/first/SPARQL.
 No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost' is therefore not allowed access.
jquery-1.10.1.min.js:6 x.ajaxTransport.sendjquery-1.10.1.min.js:6 x.extend.ajaxresultaat.php?nlquery=Dit+is+een+eerste+tekst:20 
(anonymous function)jquery-1.10.1.min.js:4 
x.Callbacks.cjquery-1.10.1.min.js:4 
x.Callbacks.p.fireWithjquery-1.10.1.min.js:4 x.extend.readyjquery-1.10.1.min.js:4 q

在 servlet 中添加:response.addHeader("Access-Control-Allow-Origin", "*");。 错误现在消失了,但它仍然响应错误,因为我无法访问 javascript 中的 PHP $js_array?说 $js_array 没有设置。

【问题讨论】:

  • 你试过success:function(data){ console.log(data) }它会告诉你是否在返回中得到任何数据
  • $js_array 的值是多少??

标签: java javascript php jquery servlets


【解决方案1】:

如果您想将 PHP 变量值放入 JS 对象中,请使用它,如下所述。

发件人:

 data: $js_array, 

收件人:

data: JSON.stringify(<?php echo $js_array; ?>),

【讨论】:

    【解决方案2】:

    由于您已经在客户端定义了 javascript javascript_array 变量

    $js_array = json_encode($tags);
    echo "var javascript_array = ". $js_array . ";\n";
    

    使用它代替服务器端变量:

            $.ajax({
                url : "http://localhost:8080/first/SPARQL",
                type: "POST",
                data: javascript_array, // updated here                 
                dataType: "json", 
                async: false,
                success: function (){
                    alert( "succes");},
                    error: function(){
                        alert("false");
                    }
            });
    

    【讨论】:

      【解决方案3】:

      最简单的方法是将其序列化为 JSON 并将其反序列化回您的 servlet。在 PHP 中使用 json_encode() 与 Java 端的任何 JSON 库进行编码和解码

      【讨论】:

      • 我尝试使用 json_encode 但它似乎不起作用
      • 它有什么问题?它不会对您的数据进行编码?
      • 使用php.net/manual/en/function.json-last-error.php检查编码过程中是否有错误
      • 谢谢,json 数组现在可以工作了。只有传球不起作用
      • “过客”是什么意思?
      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 2012-09-24
      • 2011-05-07
      • 1970-01-01
      • 2014-06-22
      • 2014-09-21
      • 2022-11-23
      相关资源
      最近更新 更多