Javascript ajax发送POST两次,从PHP接收两次/重复的结果
我发现我的JS向我的PHP文件发送了两次POST方法,这就是为什么我不断从我的PHP中获得双重/重复的结果 此JS事件将在Javascript ajax发送POST两次,从PHP接收两次/重复的结果,javascript,php,ajax,json,Javascript,Php,Ajax,Json,我发现我的JS向我的PHP文件发送了两次POST方法,这就是为什么我不断从我的PHP中获得双重/重复的结果 此JS事件将在.keyup()时执行ajax $(document).ready(function() { var getUrl = $('#url'); var youtube = regex here var web = regex here getUrl.keyup(function() { if (
.keyup()
时执行ajax
$(document).ready(function() {
var getUrl = $('#url');
var youtube = regex here
var web = regex here
getUrl.keyup(function() {
if (youtube.test(getUrl.val())) {
var youtube_url = getUrl.val().match(youtube)[0];
$.ajax ({
type:"POST",
url:"getyoutube.php",
data: {youtube_url:youtube_url},
success: function(html) { $('.echotest').append(html); }
}); }
else if (web.test(getUrl.val())) {
var extracted_url = getUrl.val().match(web)[0];
$.post("curl_fetch.php?url="+ extracted_url, {
}, function(response){
$('#loader').html($(response).fadeIn('slow'));
$('#cur_image').val(1);
});}
});
});
数据将由getyoutube.php
接收,并且只打印一次特定youtube视频的json结果
//some code ommitted
$youtube ="https://gdata.youtube.com/feeds/api/videos/'.$matches[0].'?v=2&alt=jsonc";
$curl = curl_init($youtube);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($curl);
curl_close($curl);
$test = json_decode($return, true);
print_r($test);
我似乎不明白为什么我的AJAX帖子总是两次发送帖子,有两件事需要尝试: 1) 确保绑定和解除绑定密钥更新事件 2) 使用全局变量确保一次只发送一个ajax请求 i、 e:
var ajaxrequest = false; //GLOBAL
function getyoutubedata(){
if(ajaxrequest != false){
return;
}
ajaxrequest = $.ajax ({
type:"POST",
url:"./includes/getyoutube.php",
data: {youtube_url:youtube_url},
success: function(html) { $('.echotest').append(html); ajaxrequest = false; }
});
}
3) 在调用上述函数之前,请尝试检查输入字段的内容是否已更改您应该向我们显示带有
.keyup()
事件的代码,这可能是发生错误的地方。事件处理程序可以为ajax执行包装函数,而不是直接执行ajax。例如,如果触发了keyup事件,请尝试检查输入内容是否已更改。如果是的话,运行ajax,如果不是的话-什么都不做。掩盖了这一点
$.ajax ({
type:"POST",
url:"getyoutube.php",
data: {youtube_url:youtube_url},
success: function(html) { $('.echotest').append(html); }
}); }
对这个
$.post("./includes/getyoutube.php?url="+ youtube_url, {
}, function(response){
$('.echotest').append(response);
});
POST方法现在只执行一次。虽然我无法从技术上解释它为什么有效 确保您不定期按多个键…甚至没有理由使用PHP脚本。YouTube的API接受JSONP回调。我也面临这个问题。但我的只是镀铬的。在FF中,opera仅支持单个请求。找不到任何解决方案,所以我改变了整个设计-_-实际上,还要注意的是,像“tab”和“ctrl”等键都是alzo键,即使它们不会直接更改某些内容。