【问题标题】:ajax call based on the value of 2 input fields to populate jquery autocompleteajax 调用基于 2 个输入字段的值来填充 jquery 自动完成
【发布时间】:2018-04-21 23:47:36
【问题描述】:

我已经被这个问题困扰了一段时间。我想在我的 ajax 调用中传递 2 个参数(一个表单的 2 个输入字段的值)以用于 jquery 自动完成(搜索基于使用 input1 和 input2 的值的 mysql 查询)。我有一些建议,但到目前为止我还没有运气: 这里我的 ajax 调用试图传递 2 个参数 input1 和 input2。没有显示代码错误,但自动完成功能不起作用。如果我只使用一个参数,它就可以工作。

function fillbox2(){                                                          

$('#input2').autocomplete({                                              
      source: function(request, response ){                               

          var frmStr={                                                    
            input1:$('#input1').val(),                          
            input2:$('#input2').val()                               
            requestTerm: request.term                                  
             };                                                           

      $.ajax({                                                            
      url: './cgi_temp3.cgi',                                             
      dataType: 'json',                                                   
      data:{data: frmStr},                                                
      contentType: "application/json; charset=utf-8",                     

          success: function (data) {                                      
               response ($.map( data.matches, function(item){             
                           return {                                       
                              value: item.info2,                    

                           }                                              
                       }));                                               
              }                                                           

          });                                                             
      },                                                                  

          minLength: 2,                                                   
          select: function(event, ui){                                    
          $("#prod_term").val(ui.item.value);                             
          return false;                                                   
          }                                                               

   });

这里是我处理 MYSQL 查询的 cgi 脚本

 #!/usr/local/bin/python3                                                      

  import cgi, json                                                              
  import os                                                                     
  import mysql.connector                                                        

 def main():                                                                   
   print("Content-Type: application/json\n\n")                               
   form = cgi.FieldStorage()                                                 
   term2 = form.getvalue('input2')                                        

   term1=form.getvalue('input1')                                        

   conn = mysql.connector.connect(user='***', password='***', host='localhost', database='***') 
   cursor = conn.cursor()                                                    

 qry = """                                                                 
      SELECT name2, info2                               
      FROM table2                                                          
      join table1 ON                                                    
      info2_id=information2_id                                                  
      WHERE name2 LIKE %s AND info2_id=%s                       
"""                                                                       
cursor.execute(qry, ('%' + term2 + '%',term1))   

问题可能出在哪里?

【问题讨论】:

    标签: javascript jquery ajax user-interface autocomplete


    【解决方案1】:

    乍一看,我会说这可能是时间问题。源函数不会等待您的 ajax 调用完成,因此您实际上是在给它一个空白值。尝试在 ajax 成功函数中启动自动完成。

    function fillbox2(){                                                          
      $.ajax({
        ...
        success: function (data) {
          ...
          $('#input2').autocomplete(...);
      });
    }
    

    【讨论】:

    • 感谢您的“开箱即用”思维。但它适用于一个论点。因此,如果这是一个时间问题,那么我应该得到与 2 个参数相同的问题。我对javascript相当陌生,将自动完成功能移到里面会产生很多格式问题。 ajax 是内部源代码。这是否意味着源也进入 ajax 内部?
    • 查看文档和其他一些帖子后,似乎响应参数需要异步回调。所以我的下一个猜测是您发送给响应的数据存在问题。尝试控制台记录您的 $.map 并确保它返回您期望的内容并且格式正确。 api.jqueryui.com/autocomplete/#option-sourcestackoverflow.com/questions/5077409/…
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多