【问题标题】:Display json data results from a form in a popup在弹出窗口中显示表单的 json 数据结果
【发布时间】:2017-10-12 18:17:11
【问题描述】:

我正在尝试在弹出窗口中显示从我的脚本返回的 json 数据,一旦打开弹出窗口,每个名称都将成为弹出窗口中的一个链接,一旦单击它将打开另一个页面代替父窗口,它也应该关闭父窗口。 我的代码获取了数据,但弹出窗口没有出现。这是我的代码示例。

CSS:

  .popup {
      width:100%;
      height:100%;
      display:none;
      position:fixed;
      top:0px;
      left:0px;
      background:rgba(0,0,0,0.75);
  }

  /* Inner */
  .popup-inner {
      max-width:700px;
      width:90%;
      padding:40px;
      position:absolute;
      top:50%;
      left:50%;
      -webkit-transform:translate(-50%, -50%);
      transform:translate(-50%, -50%);
      box-shadow:0px 2px 6px rgba(0,0,0,1);
      border-radius:3px;
      background:#fff;
  }

  .popup-close {
      width:30px;
      height:30px;
      padding-top:4px;
      display:inline-block;
      position:absolute;
      top:0px;
      right:0px;
      transition:ease 0.25s all;
      -webkit-transform:translate(50%, -50%);
      transform:translate(50%, -50%);
      border-radius:1000px;
      background:rgba(0,0,0,0.8);
      font-family:Arial, Sans-Serif;
      font-size:20px;
      text-align:center;
      line-height:100%;
      color:#fff;
  }

  .popup-close:hover {
      -webkit-transform:translate(50%, -50%) rotate(180deg);
      transform:translate(50%, -50%) rotate(180deg);
      background:rgba(0,0,0,1);
      text-decoration:none;
  }

JS:

$("document").ready(function(){

  $('#myForm').submit(function(e){

    e.preventDefault();
    var datastring = $("#myForm").serialize();

    $.ajax({

      type: "POST",
      dataType: "json",
      url: "get_json.pl",
      data: datastring,

      success: function(data) {

    var stable =
      '<div class="popup-inner">'+
      ' <h2>Results</h2>'+
          ' <div>'+

      $.each( data, function( key, value ) {
        stable+= '<p><a href="results_1.pl?name=' + value.name + '&gender=' + value.gender + ' "id="btnSend">Name: ' + value.name + '</a> | ' + 'Gender: ' + value.gender + '</p>';

    });

  stable += 
      ' </div>'+
          '<p><a data-popup-close="popup-1" href="#">Close</a></p>'+
          '<a class="popup-close" data-popup-close="popup-1" href="#">x</a>'+
      '</div>';

   var targeted_popup_class = jQuery(this).attr('data-popup-open');
   $('[data-popup="' + targeted_popup_class + '"]').fadeIn(350);
   e.preventDefault();

      $('[data-popup-close]').on('click', function(e)  {
        var targeted_popup_class = jQuery(this).attr('data-popup-close');
        $('[data-popup="' + targeted_popup_class + '"]').fadeOut(350);
        e.preventDefault();
      });


   },
   error: function() {
    alert('Error handing data');
   }

   });

});
});

HTML:

<form id="myForm">
  <input type="text" name="name" value="" placeholder="Search by Name" />
  <input type="submit" name="submit" value="Submit form" />
</form>


<div class="popup" data-popup="popup-1">
</div>

感谢收看!

【问题讨论】:

    标签: javascript jquery html css json


    【解决方案1】:

    当您需要 ; 时,此行似乎以 + 结尾

    var stable =
      '<div class="popup-inner">'+
      ' <h2>Results</h2>'+
      ' <div>';
    

    【讨论】:

    • 我确实需要 +,因为我要附加到变量 stable。
    • 我不确定你的意思。您当前有一个以无效的运算符结尾的语句:var stable = '&lt;div class="popup-inner"&gt;'+ ' &lt;h2&gt;Results&lt;/h2&gt;'+ ' &lt;div&gt;'+
    • 语句并没有结束,如果你看下 $.each 里面的下一行有这个 stable=+ 这意味着我附加到变量 stable,它没有一直到你可以看到的地方: stable += '
      '+ '

      Close

      '+ 'x'+ '
      ';
  • 但这不是我的问题所在,除非有更好的方法来做到这一点。
  • 所以这不是你一直附加到字符串的方式。您仍然可以用分号结束第一个语句,下一个带有stable+= 的语句将附加到该字符串。完成后将所有内容附加到 stableconsole.log(stable) 以确保它按您希望的方式显示在控制台中。
  • 【解决方案2】:

    考虑到这一点后,我解决了我的问题,这是代码,它可能对某人有所帮助。如果有任何改进代码的建议,请告诉我。

    JS:

    $("document").ready(function(){
    
      $('#myForm').submit(function(e){
    
       // To stop the default behavior, a # will be added to the URL in the address bar.
       e.preventDefault();
    
       var datastring = $("#myForm").serialize();
    
        $.ajax({
    
          type: "POST",
          dataType: "json",
          url: "get_json.pl",
          data: datastring,
    
          success: function(data) {
    
          var stable =
           '<div class="popup-inner">'+
           ' <h2>Results</h2>'+
              ' <div>';
    
          $.each( data, function( key, value ) {
            stable+= '<p><a href="results_1.pl?name=' + value.name + '&gender=' + value.gender + ' "id="btnSend">Name: ' + value.name + '</a> | ' + 'Gender: ' + value.gender + '</p>';
    
        });
    
      stable += 
          ' </div>'+
              '<p><a data-popup-close="popup" href="#">Close</a></p>'+
              '<a class="popup-close" data-popup-close="popup" href="#">x</a>'+
          '</div>';
    
       // Popup will be called here and opended in the div below 
       $('#popup').append(stable).fadeIn(350);
    
          // This function will close the popup on click.
          $('[data-popup-close]').on('click', function(e)  {
    
            var targeted_popup_class = jQuery(this).attr('data-popup-close');
        $('#'+targeted_popup_class).fadeOut(350);
        // Or use the id from the div below to close it.
        //$('#popup').fadeOut(350);
            e.preventDefault();
    
          });
    
    
       },
       error: function() {
        alert('Error handing data');
       }
    
       });
    
    });
    });
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多