2017-08-24 71 views
-1

我对编码相当陌生,目前正在进行FCC上的Wikipedia查看器项目。我有两个回调函数依赖AJAX请求并使用相同的数据,一个用于在用户输入输入时提示搜索,另一个用于在输入时显示结果。如何从AJAX请求传递两个回调函数相同的变量?

对于建议:

function searchSuggest(data) { 
    $('.suggestions').empty(); 

    var title = Array.from(data[1]); 
    var url = Array.from(data[3]); 
    var listLength = title.length; 

    for (var i = 0; i < listLength; i++) { 
    var listItem = ` 
     <li> 
     <a href="${url[i]}" target="_blank">${title[i]}</a> 
     </li> 
    `; 
    $('.suggestions').append(listItem); 
    } 
} 

而对于结果:

function display(data) { 
    $('.results').empty(); 
    $('.suggestions').empty(); 

    var title = Array.from(data[1]); 
    var snippet = Array.from(data[2]); 
    var url = Array.from(data[3]); 
    var listLength = title.length; 

    for (var i = 0; i < listLength; i++) { 
    var result = `  
     <a href="${url[i]}" target="_blank"> 
     <li> 
      <span>${title[i]}</span> 
      <p>${snippet[i]}</p> 
     </li> 
     </a> 
    `; 
    $('.results').append(result); 
    } 
    $('.results').addClass('show'); 
} 

Ajax请求返回this

有没有一种方法来传递变量到两个功能,而无需重复自己?尝试创建一个对象变量来包含数组,但没有奏效。

Full code is on codepen here

+0

欢迎来到堆栈溢出!请不要发布文字图片。我们无法在线读取它们。 – catbadger

回答

0

,你想,你可以通过一个变量/值对尽可能多的功能:

ajax(query, function(data) { 
    // maybe check keycode here? 
    display(data); 
    searchSuggest(data); 
}); 
+0

对不起,我的意思是这两个函数都使用从ajax数据创建的相同变量(标题,url,代码段),而且我现在必须在两个函数中声明它们。有没有办法在函数之外创建这些变量,然后在内部使用? –

+0

我的意思是,你可以让'searchSuggest'接受'title'和'url'作为参数,同样你可以让'display'接受'title','url'和'snippet'作为参数,但我不认为这改善了一切。保留从函数内的数据中提取所需值的任务。即你看起来很好。 –

0

我觉得这样是你在想什么。 https://codepen.io/anon/pen/jLpLYL?editors=0010

var input = $('#input'); 
var response = null; 
var dataGlobal = {}; 

function ajax(query) {//ajax now only takes one variable 
    var start = 2; 

    if (query.length >= start) { 
    if (response != null) 
     response.abort(); 

    response = $.ajax({ 
     url: 'https://cors-anywhere.herokuapp.com///en.wikipedia.org/w/api.php?action=opensearch&format=json&limit=8&suggest&search=' + query, 
     type: 'GET', 
     data: {}, 
     dataType: 'json', 
     success: function(data) { 
     console.log(data); 
     dataGlobal = data; 
     searchSuggest(dataGlobal); 
     } 
    }); 
    } 
} 

我已经创建了一个dataGlobal变量,只要求searchSuggest Ajax请求。

我将dataGlobal变量设置为ajax请求的结果,然后使用这些存储的结果调用显示。

希望这会有所帮助:)

相关问题