【问题标题】:Problem echoing php string as javascript function将php字符串作为javascript函数回显的问题
【发布时间】:2011-07-26 17:13:38
【问题描述】:

我正在使用 Jaipho 从自定义 Wordpress 插件将图像显示到移动图库。使用 Jaipho 库的 wordpress 主题使用 WP-mobile-detector 插件显示。

我遇到的问题是当我使用 php 收集照片的 URL 以回显要由 javascript 解析的函数时。我从 Safari 的元素检查器中获取生成的静态 javascript 代码并将其粘贴到我的代码中,注释掉 php,它可以在任何地方工作。 iOS 版 Safari 似乎不喜欢 php 生成的 javascript 代码。

  • HTML 5
    • <DOCTYPE html>
    • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    • <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
  • PHP 5.2.6
  • Wordpress 3.2.1

当它起作用时:

  • 在 Safari 上将用户代理设置为 iPhone
  • 静态代码替换 php 生成的代码

    $imageArray = $case->images_assc_array();  
    $i = 0;  
    foreach($imageArray['views'] as $view_name => $view_images) {  
       $before_img = $view_images['before'];  
       $after_img = $view_images['after'];  
    
       echo "dao.ReadImage($i,'".$before_img->medium_size()."','".$before_img->small_size()."','".ucfirst($view_name)." Before','".$case->description."');";  
       $i++;  
       echo "dao.ReadImage($i,'".$after_img->medium_size()."','".$after_img->small_size()."','".ucfirst($view_name)." After','".$case->description."');";  
       $i++;  
    }
    

预期的示例生成输出:

    dao.ReadImage( 0,'/wp-content/uploads/rmgallery_images/medium/408/before-front.jpg','/wp-content/uploads/rmgallery_images/small/408/before-front.jpg','Front Before','38 year old who underwent a tummy tuck.');  
    dao.ReadImage( 1,'/wp-content/uploads/rmgallery_images/medium/410/after-front.jpg','/wp-content/uploads/rmgallery_images/small/410/after-front.jpg','Front After','38 year old who underwent a tummy tuck.');
    dao.ReadImage( 2,'/wp-content/uploads/rmgallery_images/medium/409/before-side.jpg','/wp-content/uploads/rmgallery_images/small/409/before-side.jpg','Side Before','38 year old who underwent a tummy tuck.');
    dao.ReadImage( 3,'/wp-content/uploads/rmgallery_images/medium/411/after-side.jpg','/wp-content/uploads/rmgallery_images/small/411/after-side.jpg','Side After','38 year old who underwent a tummy tuck.');

【问题讨论】:

  • 发生任何 javascript 错误?
  • PHP 日志告诉你什么?它输出任何错误吗?如果没有,是否输出任何js错误?
  • @Jrod iOS 控制台 Javascript 错误:SyntaxError: Parse error on line 224var dao = new Jph_Dao();,就在我的 php 之前的行。
  • @jackJoe 日志中没有错误
  • 永远不要将 PHP 中的数据直接输出到 javascript 文本中——引入语法错误太容易了,这将彻底杀死你的 javascript。始终首先通过 json_encode() 传递数据,因此您始终会生成语法上有效的 JS 代码。

标签: php javascript iphone wordpress


【解决方案1】:

你有一些不匹配的引号:

echo dao.ReadImage($i,'".$before...

echo "dao.ReadImage($i,'".$after...

等等。

试试这些:

echo 'dao.ReadImage('.$i.',"'.$before_img->medium_size().'","'.$before_img->small_size().'","'.ucfirst($view_name).' Before","'.$case->description.'");';
echo 'dao.ReadImage('.$i.',"'.$after_img->medium_size().'","'.$after_img->small_size().'","'.ucfirst($view_name).' After","'.$case->description.'");';

【讨论】:

  • 这只是我调试中的一个错字。引号不是问题,但眼睛好
【解决方案2】:

感谢@Marc B 和@linuxrules94 的组合解决方案:

<?php
$imageArray = $case->images_assc_array();
$i = 0;

    foreach($imageArray['views'] as $view_name => $view_images):
        $before_img = $view_images['before'];
        $after_img = $view_images['after'];
    ?>

        dao.ReadImage(<?=json_encode($i);?>, <?=json_encode($before_img->medium_size());?>,<?=json_encode($before_img->small_size());?>,<?=json_encode(ucfirst($view_name));?> + " Before", <?=json_encode(stripslashes($case->description));?>);
        <? $i++; ?>
        dao.ReadImage(<?=json_encode($i);?>, <?=json_encode($after_img->medium_size());?>,<?=json_encode($after_img->small_size());?>,<?=json_encode(ucfirst($view_name));?> + " After", <?=json_encode(stripslashes($case->description));?>);
        <? $i++;
    endforeach; ?>

谢谢大家!

【讨论】:

    【解决方案3】:

    【讨论】:

    • 我试过了,但没有运气。这似乎是php和javascript之间的解析问题。 (另外,代码在我认为已经结束的列表中。8 个空格修复了它)。
    • @cfree 使用 heredocs 怎么样:php.net/manual/en/language.types.string.php 或者按照 marc B 说的做
    • @cfree Cool 你从 Marc B 和我那里得到了一个组合解决方案:D
    猜你喜欢
    • 2021-08-08
    • 2011-05-02
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多