注册 登录
编程论坛 VFP论坛

王子的fll可以让vfp实现web化想学习的来学习吧

ls_y041 发布于 2022-07-01 22:36, 3260 次点击
思路是结合框架比其他的方式方法会更适合,你真的不能再错过了
45 回复
#2
吹水佬2022-07-02 04:39
基于 TCP/IP 的,了解一下HTTP协议,只用 Windows 的 WSock API 也可以实现
都还要了解 HTML、JS 等等
#3
ls_y0412022-07-02 10:50
简单应用是可以少学习的框架是让大家方便的事
#4
sam_jiang2022-07-02 14:09
回复 楼主 ls_y041
拿出来交流交流
#5
zhken2022-07-02 21:12
弄点货来瞅瞅
#6
sostemp2022-07-04 00:32
关注
#7
ls_y0412022-07-04 12:05
想实现加362924376
#8
ls_y0412022-07-09 20:35
简单实现是很简单的
#9
ls_y0412022-07-11 20:30
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>示例演示</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- 注意:项目正式环境请勿引用该地址 -->
  <link href="// rel="stylesheet">
</head>
<body>
 
 
<div class="demoTable">
  搜索ID:
  <div class="layui-inline">
    <input class="layui-input" name="id" id="demoReload" autocomplete="off">
  </div>
  <button class="layui-btn" data-type="reload">搜索</button>
</div>
 
<table class="layui-hide" id="LAY_table_user" lay-filter="user"></table>
               
         
<!-- 注意:项目正式环境请勿引用该地址 -->
<script src="//

<script>
layui.use('table', function(){
  var table = layui.table;
  
  //方法级渲染
  table.render({
    elem: '#LAY_table_user'
    ,url: '/static/json/table/user.json'
    ,cols: [[
      {checkbox: true, fixed: true}
      ,{field:'id', title: 'ID', width:80, sort: true, fixed: true}
      ,{field:'username', title: '用户名', width:80}
      ,{field:'sex', title: '性别', width:80, sort: true}
      ,{field:'city', title: '城市', width:80}
      ,{field:'sign', title: '签名'}
      ,{field:'experience', title: '积分', sort: true, width:80}
      ,{field:'score', title: '评分', sort: true, width:80}
      ,{field:'classify', title: '职业', width:80}
      ,{field:'words', title: '字数', sort: true, width:135}
    ]]
    ,id: 'testReload'
    ,page: true
    ,height: 310
  });
  
  var $ = layui.$, active = {
    reload: function(){
      var demoReload = $('#demoReload');
      
      //执行重载
      table.reload('testReload', {
        page: {
          curr: 1 //重新从第 1 页开始
        }
        ,where: {
          key: {
            id: demoReload.val()
          }
        }
      });
    }
  };
  
  $('.demoTable .layui-btn').on('click', function(){
    var type = $(this).data('type');
    active[type] ? active[type].call(this) : '';
  });
});
</script>

</body>
</html>
#10
ls_y0412022-07-11 20:33
前端框架的代码直接抄另存为html,直接运行在王子的html,写个fsp 只要生成json就实现数据显示在前端框架了
#11
aqyejun2022-07-12 14:12
可以交流交流
#12
ls_y0412022-07-12 18:41
362924376加我qq
#13
ls_y0412022-07-19 22:04
LPARAMETERS m_IP, m_Port

SET TALK OFF
SET DATE ANSI
SET HOURS TO 24
SET CENTURY ON
LOCAL Call_Count
Call_Count = 0
SET LIBRARY TO VFPHttpServer.fll
&&连接到主进程
IF !HTTP_Connect(m_IP, VAL(m_Port))
    RETURN
ENDIF

LOCAL Ev as Boolean
LOCAL SessionSetted as Boolean     &&是否已设置了SESSION
SessionSetted = .F.
&&设置发送缓冲区大小
Http_SetChunkSize(1024)

Do While Http_IsConnected()
    m.Ev = HTTP_GetEvent(5000)    &&获得事件,有请求到达返回真,参数:整形,超时时间
    IF (m.Ev)
*!*    *!*        *以下演示COOKIE操作
            m.CookieValue    = Http_GetCookie("TNND")                    &&获得指定名称的COOKIE的值
            IF EMPTY(m.CookieValue)
                Http_SetCookie("TNND", "NTNND")                                &&设置COOKIE必须在第一次Write之前进行
            ENDIF
            
            HTTP_Write("Hello World! " + TTOC(DATETIME()) + " 第" + TRANSFORM(Call_Count) + "次复用" +CHR(13) + CHR(13))
            Call_Count = Call_Count + 1
*!*                *演示获得URL各部分内容,分别有以下几部分:
                *!*    HUF_PATH        = 3,
                *!*    HUF_QUERY        = 4,
            m.UrlPath = Http_GetUrlField(3)
            Http_Write("URL访问路径为:" + m.UrlPath + CHR(13) + CHR(13))
*!*               
*!*                *以下演示头域值获取,Http_GetHeader()也可以直接传入头域字段名
            m.oHeader = CREATEOBJECT("Empty")
            Http_Write( "头域Host的值为:" + Http_GetHeader("Host") + CHR(13))    &&传入头域名,返回头域的值,没找到则返回空字符
            m.HeaderItemSize = Http_GetHeader(-1)        &&传入负值,返回头域总数
            Http_Write("头域总数:" + TRANSFORM(m.HeaderItemSize) + CHR(13))
            FOR i=0 to m.HeaderItemSize - 1
                Http_GetHeader(i, m.oHeader)            &&传入不大于总数的正值(从0开始)和一个接收结果的对象,对象自动添加key和value属性
                Http_Write( 0h09 + m.oHeader.key + ":" + m.oHeader.value + CHR(13) )    &&对象中已设置好key和value属性
            ENDFOR
*!*    *!*               
*!*    *!*               
*!*                *以下演示查询参数的获取,Http_GetQueryField()函数里也可以直接传入参数名,没找到返回空字符串
            m.QueryFieldsCount = Http_GetQueryField(-1)    &&传入负数,获得查询参数的个数
            m.oQueryField = CREATEOBJECT("Empty")        &&创建一个“空”对象,用来接收键值对
            Http_Write( CHR(13) + "查询参数[" + TRANSFORM(m.QueryFieldsCount) + "]:" + CHR(13))
            FOR i=0 to m.QueryFieldsCount - 1
                Http_GetQueryField(i, m.oQueryField)    &&遍历查询参数,起始序号为0
                Http_Write( 0h09 + m.oQueryField.key + ":" + m.oQueryField.value + CHR(13))
            ENDFOR
*!*    *!*               
*!*    *!*                *以下演示POST数据的获取,Http_GetPostField()函数里也可以直接传入参数名,没找到返回空字符串
            m.FormFieldsCount = Http_GetFormField(-1)    &&传入负数,获得POST数据的个数
            m.oFormField = CREATEOBJECT("Empty")        &&创建一个“空”对象,用来接收键值对
            Http_Write( CHR(13) + "POST数据[" + TRANSFORM(m.FormFieldsCount) + "]:" + CHR(13))
            FOR i=0 to m.FormFieldsCount - 1
                Http_GetFormField(i, m.oFormField)        &&遍历POST数据,起始序号为0
                Http_Write( 0h09 + STRCONV(m.oFormField.key, 11) + ":" + STRCONV(m.oFormField.value, 11) + CHR(13))
            ENDFOR
            m.RawPostData = Http_GetPostRawData()
            Http_Write( CHR(9) + "原始数据:" + m.RawPostData + CHR(13))
*!*    *!*               
*!*    *!*                *以下演示SESSION操作
            IF !m.SessionSetted
                Http_SetSession("TMD", "TMD:" + TRANSFORM(DATETIME()), 900)    &&设置SESSION,最后一个参数为超时时间,可省略,默认900秒
                m.SessionSetted = .T.
            ENDIF
            m.SessionString = Http_GetSession("TMD")                    &&获得SESSION
*!*                Http_DelSession("TMD")                                    &&删除SESSION
            Http_Write( CHR(13) + "SESSION TMD = " + m.SessionString + CHR(13) + CHR(13))
*!*               
            
            Http_Write( "COOKIE:" + CHR(13) + CHR(9) + "TNND:" + m.CookieValue + CHR(13))

*!*    *!*            
            Http_Write("上传文件:" + 0h0D)   
            m.oFileInfo     = CREATEOBJECT("Empty")
            m.FileCount    = Http_GetFileInfo(-1)        &&传入负数,返回文件个数
            FOR i=0 to m.FileCount - 1
                IF Http_GetFileInfo(i, m.oFileInfo) = 0        &&正确获得数据返回 0
                    Http_Write( 0h09 + "上传文件名:" + m.oFileInfo.FileName + 0h09 + "文件大小:" + TRANSFORM(m.oFileInfo.FileSize) + " Bytes" + 0h09 + "表单名:" + m.oFileInfo.FieldName + 0h0d)
                ENDIF
            ENDFOR

            Http_End()        &&调用以后再写入均被忽略
        ELSE    &&空闲,可以干干其它事,相当于一个定时器,间隔时间由GetEvent的参数指定
        
        ENDIF
ENDDO
#14
sam_jiang2022-07-19 22:19
感觉有点复杂,代码量挺大的。楼主是不是也是收费的呀?不然可以交流一下。
#15
ls_y0412022-07-20 18:33
免费的
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-7-24 13:40编辑过]

#16
ls_y0412022-07-24 13:42
我上传了个代码大家看看能不能在TEST中搞出来生成json的prg
#17
ls_y0412022-07-24 21:31
            Http_Write( "我是应用第一人COOKIE:")
只有本站会员才能查看附件,请 登录
#18
sam_jiang2022-07-24 21:39
回复 15楼 ls_y041
感谢分享
#19
ls_y0412022-07-24 22:15
专门为vfp而生的
#20
sam_jiang2022-07-25 00:31
刚才试了一下,说fll文件无效,郁闷!
#21
ls_y0412022-07-25 06:20
加我362924376
#22
ls_y0412022-07-25 06:21
相信您会爱上它
#23
sam_jiang2022-07-25 19:22
有微信吗?现在谁还用qq啊,我换了个电脑又好用了,不知道什么情况?呵呵。。。

有没有下面函数的说明?

API 库                                实例句柄
d:\...\vfphttpserver.fll              244514816

    函数                              地址
    HTTP_FLL_Unload                   0E942720    卸载时调用。
    HTTP_Start                        0E941120   
    HTTP_Stop                         0E9411F0   
    HTTP_Connect                      0E941210   
    HTTP_GetEvent                     0E9413D0   
    HTTP_Write                        0E9415A0   
    HTTP_End                          0E9416B0   
    HTTP_GetHeader                    0E9416C0   
    HTTP_SetHeader                    0E941880   
    HTTP_SetRespCode                  0E941A70   
    HTTP_GetUrlField                  0E941A90   
    HTTP_GetQueryField                0E941AC0   
    HTTP_GetFormField                 0E941C70   
    HTTP_Redirect                     0E941EF0   
    HTTP_GetFileInfo                  0E941FB0   
    HTTP_SetSession                   0E942220   
    HTTP_GetSession                   0E9423C0   
    HTTP_DelSession                   0E942540   
    HTTP_SetCookie                    0E941970   
    HTTP_GetCookie                    0E941E20   
    HTTP_GetPostRawData               0E942670   
    HTTP_IsConnected                  0E9426F0   
    HTTP_SetChunkSize                 0E942200  
#24
ls_y0412022-07-25 20:41
loststaryfj
#25
sam_jiang2022-07-27 14:37
回复 24楼 ls_y041
加了
#26
惬意_甬车2022-07-29 08:48
赞!
#27
ls_y0412022-07-31 06:57
简单的事不能想的太复杂了,前端框架的接口JSON只要实现动态的JSON前端框架就动态了,vfp可以处理数据两者结合不好吗
#28
ls_y0412022-07-31 22:08
借助王子的fll可以简单实现对JSON数据的前后传递不实现我说的bs 了
#29
ls_y0412022-08-02 05:33
vfp的bs之路其实在后台只要写接收前端的参数,打开数据处理数据,生成数据JSON通过王子fll传输到前端,结合框架就成功了,不要想的太难了
#30
mywisdom882022-08-02 08:29
以下是引用ls_y041在2022-8-2 05:33:46的发言:

vfp的bs之路其实在后台只要写接收前端的参数,打开数据处理数据,生成数据JSON通过王子fll传输到前端,结合框架就成功了,不要想的太难了

下载了,无法运行,是不是缺少什么。
#31
kangss2022-08-13 13:43
回复 26楼 惬意_甬车
这个就是用王子的 FLL + VFP开发的中间件:
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


这个是用篮茑开发的 app 通过 FLL 服务器连接 SQL 获取数据
只有本站会员才能查看附件,请 登录



[此贴子已经被作者于2022-8-13 13:56编辑过]

#32
kangss2022-08-13 13:49
FLL、test.prg源码、测试说明
只有本站会员才能查看附件,请 登录


这个跟13楼15楼一样

[此贴子已经被作者于2022-8-13 14:19编辑过]

#33
kangss2022-08-13 13:52
回复 30楼 mywisdom88
如果 FLL 不能正常运行,必须安装:VC_redist.x86.exe
只有本站会员才能查看附件,请 登录
#34
ls_y0412022-08-14 06:06
为什么不好上手是因为大家不能直接运行实现结果。实例不能直接出结果,最好是放到D:\fll目录直接运行,直接出结果的实例。哈哈,没办法。
#35
ls_y0412022-08-14 06:11
一实验就不成功,对新人来说就不想用了,本来就不相信的东西这么多年都没成功。所以说要上手,框架是最直接的一下就有结果。哈哈
#36
sam_jiang2022-08-14 21:05
我觉得做成类供使用者调用就更好了。
#37
kangss2022-08-15 17:58
以下是引用sam_jiang在2022-8-14 21:05:28的发言:

我觉得做成类供使用者调用就更好了。

王子的“HttpServer.fll”已经集成了 http 常规命令。剩下的就是 VFP 对它的功能发挥了。
#38
mnf88882022-08-16 10:54
ddddddddddddddd
#39
kangss2022-08-18 10:22
以下是引用sam_jiang在2022-7-25 00:31:33的发言:

刚才试了一下,说fll文件无效,郁闷!


FLL 不支持XP系统。

想省事,加载 FLL 启动 http server 服务的 exe 可以简单话:
只有本站会员才能查看附件,请 登录
#40
lnfx20192022-08-27 06:26
学习中
#41
ls_y0412022-09-10 18:55
这个fll大家还是真的可以研究一下的,其实难的地方是理解,只要想的简单一点就对了,天天BS这么多年了为什么不能让大家上手,是哪里的事,前端难,但有这么多的好框架,让前端方便了不少,可以少学。会一点就行了,希望大家共同上手学习。!!!!!!
#42
sam_jiang2022-09-10 20:35
回复 41楼 ls_y041
你们了解这个fll的用法,可以弄一份教程出来,教教大家怎么使用。。。
#43
zzx23522022-10-04 17:47
学习学习
#44
kangss2023-05-12 19:20
以下是引用sam_jiang在2022-9-10 20:35:24的发言:

你们了解这个fll的用法,可以弄一份教程出来,教教大家怎么使用。。。

压缩包中有:《测试说明.TXT》

VFPHttpServer.fll 测试、调试说明:

1、test.exe不是直接运行的
2、用记事本打开web.config
3、将SubProcessPathName后面的路径改写成你自己正确的路径,就是text.exe所在的全路径
4、打开VFP
5、在命令窗口输入(如果web.config不在当前目录,加上全路径):
    Set library TO VfpHttpServer.fll
    Http_Start("web.config")
6、打开浏览器,在地址栏输入:http://127.0.0.1/test.fsp  或  http://192.168.0.51:8080/index.fsp

首次测试建议只修改端口号和文件夹名称,注意:“\\”
   "Port":8080,
    "SubProcessPathName":"D:\\BlueBird_my\\MYWEB服务器\\VFPHttpServerTest 2020\\test.exe",
    "DefaultPath":"D:\\BlueBird_my\\MYWEB服务器\\VFPHttpServerTest 2020",
#45
独木星空2023-05-12 22:33
回复 31楼 kangss
看样子,很适用!
#46
ls_y0412023-05-13 08:20
https://dev.目前感觉还是学习这样的框架比较好,因为大家只是在为自己的软件增加一个手机版本的功能就相当完美。
1