首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jQuery将jpeg显示为由PHP文件返回的IMG标记的源属性

如何使用jQuery将jpeg显示为由PHP文件返回的IMG标记的源属性
EN

Stack Overflow用户
提问于 2017-04-21 03:14:31
回答 2查看 349关注 0票数 3

我必须承认,作为一个新手,我甚至不知道如何问我的问题。不过,这就是问题所在。

上下文:我有一个用PHP编写的注册脚本,它使用安全代码生成PHP脚本,它生成的jpeg是直接加载为图像,包含随机生成的字符串的图形表示,这是存储在cookie中,并必须由注册方输入,以验证注册表。

目标:我想创建我自己的“刷新”代码,它将调用安全代码生成脚本,在每次我按下“刷新”按钮时创建并显示一个新的安全图像。

以下是安全代码生成脚本:

代码语言:javascript
复制
<?php

$im = imagecreate(300,60) or die("Cannot initialize new GD Image stream"); // identyfikator zasobu
$backgroundcolor = imagecolorallocate( $im, 225, 225, 225 );
$textcolor = imagecolorallocate( $im, 0, 0, 0 );
imagefilledrectangle($im, 0, 0, 140, 30, $backgroundcolor);


if( isset($_POST['refresh']) )
{
    if( isset($_COOKIE['randomimage']) )
        unset($_COOKIE['randomimage']);

    $randomizedString = createRandomString();
    imagestring( $im, 100, 65, 20, $randomizedString, $textcolor );
    setcookie('randomimage', $randomizedString, time() + 270 );
}
else if ( !isset($_COOKIE['randomimage'] ) )
{
    $randomizedString = createRandomString();
    imagestring( $im, 100, 65, 20, $randomizedString, $textcolor );

    setcookie('randomimage', $randomizedString, time() + 270 );
}
else
{
    $image_string = $_COOKIE['randomimage'];
    imagestring( $im, 100, 65, 20, $image_string, $textcolor );


}

header("Content-type: image/jpeg");
imagejpeg($im);
imagedestroy($im);


function createRandomString()
{
    srand( (double) microtime() * 1000000 );

    $letters_capital = range('A', 'Z');
    $letters_small = range('a', 'z');
    $number = range(0,9);

    $chars = array_merge($letters_capital, $number, $letters_small );

    shuffle($chars);

    $randString = "";

    for ( $i = 0; $i < 10; $i++ )
    {
        $randString .= $chars[$i] . " ";
    }

    return $randString;
}

?>

以下是jQuery代码,注册脚本的一部分:

代码语言:javascript
复制
$('#refreshBtn').on('click', function(event){
        $.post(
            "./createrandomizedimaged83r04.php",           // action
            {                                   // data
               refresh: "refresh"
            },
            function(data)                      // callback
            {


                $('#imgPic2').attr('src',data);


            }
        );

    });

结果如下所示显示在firefox控制台中:

代码语言:javascript
复制
GET http://***directory***/%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD 

在这一点上,我怀疑,虽然我可能没有使用正确的术语,但我试图将图像的某种二进制表示推到img的src中,这会导致胡言乱语。

相反,在jQuery部分中,我编写了以下代码:

代码语言:javascript
复制
$('#imgPic').html('<img src=\'' + data +'\'>');

我得到了如下的服务:

代码语言:javascript
复制
�����Yy?j��:U�/6@�d��.z������O����0������3��7��ե\��|C-���D y�]�h-ؑ)��#��ŏʼ��~����4�m���*���,��*H��ޭ�7��=�4� Y����w���p�;���8Pp0���rN���Ѵ{8�������A{�_qh�1�}��'�cg{i�ڥՕ�76�gd�Hpy~��� '�T����H�U�I�;מ�nSa�R�J�Ҧ�t� ^I�����%�UcvU���gnH�kѨxj�x���:L�J�#�;�ٝ���$�����/�%Oǿ��� ]�e^x���u����e��x��q��FFA9կ<���д_�h���b������Z�&���e�@.0W 79����Q_�kJ���-!��c��bV@B0�AӥiQ\W����|k�#N՞� YgI��9~HY7&��nO�r�s�"�}*������5� �c��X��'*��f7��Ǩ�(�� (�� (�� (�� (�� (�� (�� (�� ������mt�4�Ta|�Wluc��y�袀3uh���>�����*�\�$�$�, �I�ޯAV�G$Pġ#�5 ��`ڤ�� �����~�m�L�4^la��G\�a��9��V�o�١�g�����g�����ny�L��Ps��A

我到底该如何获取由PHP代码生成脚本传递的图像并使用jQuery来显示它?

这是图像应该放到的地方(在注册脚本中):

代码语言:javascript
复制
<table align='left' border='0' cellspacing='0' cellpadding='4' width='100%'>
<tr>
    <td align='center' colspan='2' id='imgPic' name='imgPic'><img id='imgPic2' src='{$this->image_url}'></td>
</tr>
<tr>
    <td align='center' colspan='2' id='refreshBtn' name='refreshBtn'><input id='refreshBtn' name='refreshBtn' type='button' class='button' value='Refresh'></td>
</tr>
<tr align='center'>
    <td align='right' style='width:50%;'><span class='registration'><font style='color:#663300;'>Enter the above phrase:</font></span></td>
    <td align='left' style='width:50%;'><input type='text' id='wordVal' name='wordVal' autocompelte='off' maxlength='10' size='17'></td>
</tr>
<tr>
    <td align='center' colspan='2'><span id='orgWord'></span>
    <br>
    <span id='usrWord'></span></td>
</tr>

请帮我弄一下代码。此外,由于jQuery代码(在注册脚本中)向代码生成脚本发出POST请求,因此我想知道如何使用POST请求而不是GET来设置刷新的图像。

提前致以问候和感谢。

EN

回答 2

Stack Overflow用户

发布于 2017-04-21 03:20:12

如果content-type本身是图像类型,则不需要打开ajax请求:

代码语言:javascript
复制
$('#refreshBtn').on('click', function(event) {
    $('#imgPic').attr('src', './createrandomizedimaged83r04.php?_=' + (new Date()).getTime());
});

但是,这不是post请求,因为img标记默认情况下会打开一个get请求。

如果您确实需要通过post请求来完成此操作,我建议您使用期望base64内容的ajax请求。

使您的PHP脚本生成一个base64图像(检查this post),并将结果用作图像的src属性,就像您在javascript中所做的那样。

票数 3
EN

Stack Overflow用户

发布于 2017-04-21 03:25:45

您可以使用XMLHttpRequest()fetch()将数据POST到服务器,并以BlobArrayBuffer的形式从服务器获取响应,这些响应可以使用FileReaderResponse转换为Blob URLdata URI,然后将结果设置为<代码>D10元素的<代码>D9。

jQuery.ajax()jQuery.post()没有将.responseType设置为"blob""arraybuffer"或调用.blob().arrayBuffer()的默认选项,请参见Displaying pdf from arraybuffer

代码语言:javascript
复制
let url;

$('#refreshBtn').on('click', function(event) {
  if (url) {
    URL.revokeObjectURL(url);
  }
  var fd = new FormData();
  fd.append("request", "request");
  var request = new XMLHttpRequest();
  request.open("POST", "./createrandomizedimaged83r04.php", true);
  request.responseType = "blob";
  request.onload = function() {     
                     url = URL.createObjectURL(this.response);           
                     $('#imgPic2').attr('src', url);
                   }
  request.onerror = function(e) {
                      console.log(e, this.responseText)
                    }
  request.send(fd);

});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43528048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档