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"," ",$elem);
那就试试吧
var json_university_addresses = '<?php echo $sesion_array ?>';
【讨论】:
但这会影响用户在文本框中的显示,不是吗? 如果你不想要换行符,如果它已经在你的会话数组中,就删除它们。它不会影响显示它会正确显示,如果它有效,请尝试一次以上是关于PHP 数组到 JQuery的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery ajax 将 javascript 数组变量发送到 php 脚本(获取字符串作为输出而不是数组)
将 PHP json_encode 数组发送到 jQuery