我有一个页面应用程序,它代替页面,一次加载一个节。这个应用程序的基本功能是,您输入一个查询,然后转到一个结果页面,然后在另一个表单中的结果之上--与第一个表单相同,但是不是进入一个新的视图(进入同一页面的另一个部分),结果就出现在它下面。每当加载新视图时,另一个视图就会被隐藏。(例:家庭视图有搜索表单。搜索,提交,隐藏主页视图,然后显示结果视图)
数据来自使用Ajax的远程服务器。
编辑:多亏了@Himal,我修正了第一个问题。然而,现在当我在第二种形式中输入一些东西时,它只返回"Nothing now“。我不知道它为什么这样做,即使我输入了一些东西。有什么原因吗?
老(固定!)问题:
然而,问题是第一种形式是可行的。您搜索一个查询,然后结果将显示在结果视图中,但是,当您再次使用位于结果视图之上的表单进行搜索时,它不会做任何事情。以下是代码:
getPickerData = function() {
var tickerForm = $('#analyze-form'),
pickHolder = $('#PickHolder'), // The view where the results and second form resides
pickContent = $('#PickHolder #pick-content'); // Where the results is loaded
tickerHomeVal = $('#home #ticker').val(); // Value of the first ticker
//document.getElementById('PickHolder').innerHTML='<h3 class="loadingtext">Loading Data</h3>';
//document.getElementById('PickHolder').style.display='';
$.ajax({
type: "POST",
url: 'http://differenturl.com/something.php',
data: "something="+tickerHomeVal+"&something",
complete: function(data){
pickContent.html(data.responseText);
}
});
var tickerResultsVal = $('#PickHolder #ticker').val();
$('#results-submit-ticker').on('touchstart click', function(e){
console.log('clicked?');
$.ajax({
type: "POST",
url: 'http://differenturl.com/something.php',
data: "something="+tickerResultsVal+"&something",
complete: function(data){
pickContent.html(data.responseText);
console.log(data);
}
});
});
}
第二个ajax调用用于第二个表单。单击事件就在这里。返回false在那里,这样按钮就不会改变视图。
var viewchange = $('.toview');
viewchange.on('touchstart click', function(event){
var $this = $(this);
doAction($this); // runs the function above with a bunch of unrelated if's.
return false;
});
差不多就是这样。有一个if语句,它查找某个类来运行这个函数,但我认为这与此无关。
第二种形式的HTML如下所示。它和第一种形式完全一样,只是这里的不同之处在于,它在一个不同的视图中,以及在它下面的一个div,对于结果。
<div id="PickHolder" class="view container">
<form id="analyze-results-form" action="" class="analyze-form">
<div class="input-container">
<input id="ticker" class="input-stock" type="text" placeholder="Add Ticker">
</div><!-- /.input-container -->
<button id="results-submit-ticker" class="action action-data btn no-view" data-ref="#PickHolder">Analyze</button>
</form>
<div id="pick-content"></div>
</div>
以及不同的ids,从JS中可以看出。
为什么JS的区段表单不返回数据?console.log()甚至不会发生在单击。
发布于 2014-09-16 03:27:19
正如himal所建议的,对于ajax请求,您应该使用成功回调而不是完成回调,以便能够查看是否存在错误或是否已成功完成。所以ajax调用看起来应该是,
$.ajax({
type: "POST",
url: 'http://differenturl.com/something.php',
data: "something="+tickerResultsVal+"&something",
success: function(data){
pickContent.html(data.responseText);
console.log(data);
},
error: function(xhr, error) {
// handle error
}
});
已完成的回调隐藏了名为tickerResultsVal的变量的未设置值的基础错误。
在单击事件范围之外定义和设置tickerResultsVal的值。因此,在第一次运行时,它被正确设置并发送到ajax请求。但在你的第二次点击;
var tickerResultsVal = $('#PickHolder #ticker').val();
永远不会运行,因此从ajax请求中返回"Nothing submitted“错误的tickerResultsVal是未设置的。
可以使用指向值的相对路径,也可以将tickerResultsVal的定义放在单击事件中。
$('#results-submit-ticker').on('touchstart click', function(e){
var tickerResultsVal = $('#PickHolder #ticker').val(); // inside the scope of click event
console.log('clicked?');
$.ajax({
type: "POST",
url: 'http://differenturl.com/something.php',
data: "something="+$('#PickHolder #ticker').val()+"&something", // or just use relative path to input value
complete: function(data){
pickContent.html(data.responseText);
console.log(data);
}
});
});
https://stackoverflow.com/questions/25859588
复制相似问题