我发现我的JS发送POST方法两次到我的PHP文件,这就是为什么我不断从我的PHP获得双重/重复结果。
这个JS事件在.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帖子不断发送POSTS方法两次
答案 0 :(得分:0)
要尝试的事情:
1)确保绑定并解除绑定事件
2)使用全局变量确保一次只发送一个ajax请求
即:
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; }
});
}
顺便注意youtube api支持jsonp回调,所以你可能想考虑通过这个来做到这一点
3)尝试在调用上述函数之前检查输入字段的内容是否已更改
答案 1 :(得分:0)
您应该向我们展示.keyup()
事件的代码,可能是错误的地方。事件处理程序可以为ajax执行包装函数,而不是直接执行ajax。例如,如果触发了keyup事件,请尝试检查输入内容是否已更改。如果是这样,运行ajax,如果不是 - 什么都不做。
答案 2 :(得分:0)
转换了这个
$.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方法现在正在执行一次。虽然我无法从技术上解释为什么它有效。