代码之家  ›  专栏  ›  技术社区  ›  Ben G

从选项/选择web窗体下载数据

  •  0
  • Ben G  · 技术社区  · 15 年前

    假设有一个网站有一系列的选项/选择下拉列表。当用户从下拉列表a中进行选择时,其选择的值将发布到服务器并填充下拉列表B。下拉B以相同的方式填充下拉C。当选择下拉菜单C时,数据会显示在C中特定于它们的选择。以前的选择会一直保留,除非它们更改了更高的值,在这种情况下,所有内容都会重置为低于该值。在HTML中,它看起来像这样:

    Drop-Down A 
    <select class="submitOnChange">
     <option value="a1">A</option>
     <option value="a2" SELECTED>B</option>
     <option value="a3">C</option>
    </select>
    Drop-Down B
    <select class="submitOnChange">
     <option value="b1" SELECTED>B-A</option>
     <option value="b2">B-B</option>
     <option value="b3">B-C</option>
    </select>
    Drop-Down C
    <select class="submitOnChange">
     <option value="c1">B-A-A</option>
     <option value="c2">B-A-B</option>
     <option value="c3" SELECTED>B-A-C</option>
    </select>
    [Data for B-A-C is shown here because they clicked that]
    

    该脚本的具体工作方式是,每次选定的选项发生更改时,都将所有选定选项的POST发送给自己。

    我想从这个web应用程序下载所有数据;也就是说,我想看到与所有可能的下拉C值相关联的数据。最好的办法是什么?我看到wget被设置为递归地处理链接,但似乎不是这样的表单。我会对最简单最快捷的方法感兴趣。我知道PHP,所以我愿意用cURL编写一个脚本,但是如果有一个更简单的解决方案,比如一个已经完成这个任务的程序(wget?)我会感兴趣的。欢迎任何提示或建议。

    3 回复  |  直到 15 年前
        1
  •  0
  •   Sébastien VINCENT    15 年前

    你可以用卷曲来做。

    您可以从命令行使用它:

    curl -d "name=Rafael%20Sagula&phone=3320780"                 http://www.where.com/guest.cgi
    

    来源是CURL手册: http://curl.haxx.se/docs/manual.html

        2
  •  0
  •   Zachary Scott    15 年前

    您可以将信息结构化为一个链表,其中包含数据和父主键。这样你就可以一次下载所有的数据,比如JSON。

    我们所做的是设置三个web方法,第一个提供全部设置选项,第二个和第三个提供一个和两个参数,所有三个都向客户端提供JSON,使用JQuery和ajax调用:

    var responseObject = {};
    responseObject.parameterA = $('#selectA option:selected').val();
    responseObject.parameterB = $('#selectB option:selected').val();
    responseObject.parameterC = $('#selectC option:selected').val();
    var jsonResult = JSON.stringify(responseObject);
    
    $.ajax({
        type: "POST",
        url: "http://whereever.com",
        data: jsonResult,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (j) { 
            var options = '';
            for (var i = 0; i < j.length; i++) {
            options += '<option value="' + j[i].value + '">' + j[i].text + '</option>';
    }
    

    在这种情况下,success函数将填充下一个select,但您可以根据需要重新格式化数据。J包含数据。

        3
  •  0
  •   Clock ZHONG    11 年前

    巴邦克,

    我认为您不能用该html文件将数据发布到服务器,因为您错过了select部分中的“name”属性,它们应该如下所示:

    Drop-Down A 
    <select class="submitOnChange" name="selectA">
     <option value="a1">A</option>
     <option value="a2" SELECTED>B</option>
     <option value="a3">C</option>
    </select>
    Drop-Down B
    <select class="submitOnChange" name="selectB">
     <option value="b1" SELECTED>B-A</option>
     <option value="b2">B-B</option>
     <option value="b3">B-C</option>
    </select>
    Drop-Down C
    <select class="submitOnChange" name="selectA">
     <option value="c1">B-A-A</option>
     <option value="c2">B-A-B</option>
     <option value="c3" SELECTED>B-A-C</option>
    </select>
    

    然后可以使用以下wget命令列表获取内容:

    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b1&selectC=c1" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b1&selectC=c2" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b1&selectC=c3" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b2&selectC=c1" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b2&selectC=c2" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b2&selectC=c3" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b3&selectC=c1" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b3&selectC=c2" http://yoururl.com/
    wget -O yourhtml.htm --post-data "selectA=a1&selectB=b3&selectC=c3" http://yoururl.com/
    ......
    wget -O yourhtml.htm --post-data "selectA=a3&selectB=b3&selectC=c3" http://yoururl.com/