ajax发送POST两次,从PHP接收双重/重复结果

时间:2013-10-26 08:09:28

标签: javascript php ajax json

我发现我的JS发送POST方法两次到我的PHP文件,这就是为什么我不断从我的PHP获得双重/重复结果。

enter image description here

这个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方法两次

3 个答案:

答案 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方法现在正在执行一次。虽然我无法从技术上解释为什么它有效。