PHP 数组到 JQuery

Posted

技术标签:

【中文标题】PHP 数组到 JQuery【英文标题】:PHP Array to 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:他可能有一个包装类来访问会话变量。但这并没有真正影响提出的问题 【参考方案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 ?>';

【讨论】:

但这会影响用户在文本框中的显示,不是吗? 如果你不想要换行符,如果它已经在你的会话数组中,就删除它们。它不会影响显示它会正确显示,如果它有效,请尝试一次

以上是关于PHP 数组到 JQuery的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 将可排序列表保存到 PHP 数组

将 jquery 字符串插入到 php 数组中

使用 jquery ajax 将 javascript 数组变量发送到 php 脚本(获取字符串作为输出而不是数组)

将 PHP json_encode 数组发送到 jQuery

如何访问 json php 中的数组到 javascript/jquery

使用jQuery .load()将数组从输入加载到PHP?