【问题标题】:PHP Array to JQueryPHP 数组到 JQuery
【发布时间】:2012-08-22 22:25:29
【问题描述】:

我有一个数组通过会话传递给页面:

Array(
[0] => Somewhere
Belfast
[1] => New York
)

然后将数据收集到一个 JS 变量中:

var json_university_addresses = '<?php echo (Session::get('university_address'))?>';

再拆分成JS数组之前:

var aUniversityAddresses = json_university_addresses.split(',');

我遇到的问题是“某处”和“贝尔法斯特”之间的换行符。这导致页面失败。

我可以对任何一方的数据做些什么来使这更容易吗?我想向用户显示换行符。

谢谢

【问题讨论】:

  • 为什么是Session::get('university_address') 而不是$_SESSION['university_address']
  • 这是 Laravel。 Session::get 是要使用的符号。
  • @dnagirl:他可能有一个包装类来访问会话变量。但这并没有真正影响提出的问题

标签: php jquery laravel


【解决方案1】:

使用json_encode 不是更好(阅读:更容易)吗?然后就可以在客户端格式化了。

【讨论】:

  • 我尝试过 json 编码/解码,但由于数组不是键/值,它只返回一个标准数组。
  • 第一次迭代中的换行符也会出现同样的问题。结果是一个JS错误:未终止的字符串文字
  • 在使用 Laravel 时请注意。使用Response::json(Session::get('university_address') 发送到您的页面虽然 laravel 不会向字符串添加太多数据,但它确实为它提供了一个通用结构,这意味着您可以编写 catch 所有 JS 函数而无需手动编码 JSON 结构。
【解决方案2】:

这里是解决方案...

<?php
    $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
    echo json_encode($arr);
 ?>

【讨论】:

    【解决方案3】:

    你可以直接在php代码中尝试implode直接输出数组:

    var aUniversityAddresses = [<?php echo implode(",", Session::get('university_address'))?>];
    

    http://php.net/manual/en/function.implode.php

    【讨论】:

    • 抱歉,代码应该在会话期间内爆。这没什么区别。
    • 或者更确切地说它确实但是给出了不同的错误。由于换行符在那里,JS var 认为字符串没有终止。
    【解决方案4】:

    您应该先escape newline characters,然后再将数据输出到javascript:

    $txt = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $txt);
    

    这样,您的最终代码将是:

    $universities = Session::get('university_address');
    $universities_string = implode(',', $universities);
    $universities_js = str_replace( array( "\n", "\r" ), array( "\\n", "\\r" ), $universities_string);
    

    然后在javascript文件中:

    var json_university_addresses = "<?php echo $universities_js ?>";
    

    【讨论】:

      【解决方案5】:

      好的,我设法得到了我想要的:

      var json_university_addresses = '<?php echo (Session::has('university_address')) ? preg_replace('/[\r\n]+/', "\\n",addslashes(implode(',',Session::get('university_address')) )) : "" ?>';
      

      感谢您的帮助。我在这里用 JSON 快速搜索了未终止的字符串文字,并得到了上面的 preg 替换语句。

      谢谢

      【讨论】:

        【解决方案6】:

        我认为你的 php 数组中有换行符,所以你应该先从会话数组中删除它们,然后在脚本中使用它

        $sesion_array=Session::get('university_address');
        
        $sesion_array=array_filter($sesion_array,'myFunction');
        
        function myFunction($elem)
        {
          return str_replace("\n","&nbsp;",$elem); 
        }
        

        那就试试吧

        var json_university_addresses = '<?php echo $sesion_array ?>';
        

        【讨论】:

        • 但这会影响用户在文本框中的显示,不是吗?
        • 如果你不想要换行符,如果它已经在你的会话数组中,就删除它们。它不会影响显示它会正确显示,如果它有效,请尝试一次
        猜你喜欢
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        相关资源
        最近更新 更多