Jquery ajax调用HTTP上的延迟响应

时间:2015-09-22 16:35:11

标签: javascript jquery ajax asynchronous https

我有2个环境,Dev和QA,Dev没有HTTP,其中QA有HTTPS,我的代码从Google导入联系人。我打电话给ajax来获取联系人, 问题是在Dev中它工作正常,但在QA中它只是在导入时停止浏览器(尽管导入在后端运行并且数据正在数据库中保存)

我在控制台上没有任何内容,在Chrome的网络标签中,我看到没有收到回复。

以下是我的代码段的一部分。

$.ajax({
                    type: "GET",
                    url :"index.php?page=AJAX&action=importSocial",
                    data: {'import':importSource},
                    success: function(output) {
                        if(output=='multiple'){

                        }else if(output.indexOf("getFB") >0){

                            window.location = output;
                            //alert(output+output.length);
                        }else{

                            window.location = window.location.href;


                        }
                    }
        }); 

默认情况下async是真的所以我没有触及它,有没有人可以帮助我,我猜它是由于HTTPS。

Async和javascript是必不可少的标签,Gmail API与它无关,P.S用于标签编辑器。

2 个答案:

答案 0 :(得分:1)

  1. 添加失败并完成回调,以便我们可以看到正在发生的事情:
  2. 尝试使用特定于HTTP的嗅探器,例如 Fiddler http://www.telerik.com/fiddler) - 最初由 Eric Lawrence 撰写,然后由的 Telerik的 即可。 它是最好的(和免费)HTTP /网络数据包嗅探器之一。

    观察客户端和服务器之间的流量。一般情况下,请确保针对此特定HTTPS连接(请求/响应)的TCP / IP一切正常 - 例如,确保存在TCP握手。

    更具体地说,关于您的代码,请查找:

    1. <强>客户端:

      • 您的浏览器生成的成功HTTP请求 - (与Chrome(浏览器)网络面板交叉引用)具有正确的JSON有效负载。

        (请参阅jQuery documentation),了解您在上面写的jQuery $.ajax()调用应该是什么样子

      • 确保相同的成功HTTP请求实际上使您的计算机与浏览器生成的方式相同

      • 从服务器到达客户的任何类型的回复

    2. 服务器端:
      • 任何到达您服务器的HTTP请求
      • 到达您服务器的成功HTTP请求
      • 您的服务器端代码是否正在运行?
      • 检查您的日志
      • DB中有什么?
      • 您的PHP代码是否向GMail发出请求?
      • 使用Fiddler查看客户端您的PHP代码)和服务器之间发生了什么( GMail API )在服务器端contacts API调用
      • 从服务器生成的HTTP响应是什么样的?
      • 生成的HTTP响应是否已从服务器到达客户端PC

答案 1 :(得分:1)

你可以添加complete / failure回调,因为其他答案就是这样(这应该告诉你究竟发生了什么):

$.ajax({
  type: "GET",
  url :"index.php?page=AJAX&action=importSocial",
  data: {'import':importSource},
  success: function(output) {
    if(output=='multiple'){

      //NOTHING?? IS THAT WHAT YOU MEANT TO DO HERE?

    }
    else{ 
      if(output.indexOf("getFB") >0){
        window.location = output;
        //alert(output+output.length);
      } 
      else{
        window.location = window.location.href;
      }
    }  //END: if(output=='multiple')
  },  //END: `success`:

  /*************************************************
   *  The following assumes jQuery 1.4.x
   *------------------------------------------------
   * <SUMMARY> jQuery 1.4.x `failure` callback function (3 params)</SUMMARY> 
   * <PARAM> jqXHR jqXHR:  jQuery 1.4.x, XMLHttpRequest) object </PARAM>
   * <PARAM> String textStatus:
   *   <VALUE> null:  actual null (not a string) if $.ajax() request is successful)</VALUE>
   *   <VALUE> "timeout"</VALUE>
   *   <VALUE> "error"</VALUE>
   *   <VALUE> "abort"</VALUE>
   *   <VALUE> "parsererror"</VALUE>
   * </PARAM>
   * <PARAM> String errorThrown:  HTTP error from Server</PARAM> 
  *************************************************/
  failure: function(jqXHR, textStatus, errorThrown){
    if(!textStatus){
      console.err(
        "PROBLEM:  " + 
        "$.ajax() `failure` callback called: " + 
        "`textStatus` = `null` or *empty string*: " + 
        "apparently no $.ajax() request error occurred?"
      ); //END: console.err()
    } //END: if
    else {
      console.err(
        "$.ajax `failure` type \"(0)\"" + 
        "\n" +
        "`HTTP Status` from Server: (1)" + 
        "\n" +
        "`jqXHR object: (2)",
        textStatus,  // 1st replacement (0) - String: $.ajax() status code
        errorThrown, // 2nd replacement (1) - String: HTTP status code
        jqXHR        // 3rd replacement (2) - object: jqXHR object
      ); //END: console.err()
    } //END: else
  }, //END: 'failure`:

  /*************************************************
   *  The following assumes jQuery 1.4.x
   *------------------------------------------------
   * <SUMMARY> 
   *   jQuery 1.4.x `complete` callback function (2 params).
   *   This function is called when the request finishes, i.e.
   *   after the `success` and `error` callbacks are executed. 
   * </SUMMARY> 
   * <PARAM> jqXHR jqXHR:  jQuery 1.4.x, XMLHttpRequest) object </PARAM>
   * <PARAM> String textStatus:
   *   <VALUE> "success" </VALUE>
   *   <VALUE> "notmodified" </VALUE>
   *   <VALUE> "nocontent" </VALUE>
   *   <VALUE> "error" </VALUE>
   *   <VALUE> "timeout" </VALUE>
   *   <VALUE> "abort" </VALUE>
   *   <VALUE> "parsererror" </VALUE>
   * </PARAM>
  *************************************************/
  complete: function(jqXHR jqXHR, String textStatus ){
   if(!textStatus){
      console.err(
        "PROBLEM:  " + 
        "$.ajax() `complete` callback called: " + 
        "`textStatus` = `null` or *empty string*: " + 
        "apparently $.ajax() request didn't complete?"
      ); //END: console.err()
    } //END: if
    else {
      console.err(
        "$.ajax `complete` type: \"(0)\"" + 
        "\n" +
        "`jqXHR object: (1)",
        textStatus,  // 1st replacement (0) - String: $.ajax() status code
        jqXHR        // 2nd replacement (1) - object: jqXHR object
      ); //END: console.err()
    } //END: else
  }, //END: 'complete'
});  //END: $.ajax()