JQuery Ajax函数返回

时间:2011-03-24 23:32:59

标签: javascript jquery ajax

我已经定义了一个返回“yes”或“no”的文件availability.php,我有一个必须在订阅用户之前检查表单可用性的表单,并且我使用这个ajax函数执行此操作,但是比较线似乎不起作用?

        availability: function(element, value) {
          $.ajax({  
            type: "GET",  
            url: "/tunnel/availability.php",  
            data: "username="+element, 
            dataType: "html", 
            success: function(data){   
              $("#response").html(data);
              var $response = data;
              if ($response == "yes")
                 alert("found");
             }  
          });
        }

3 个答案:

答案 0 :(得分:0)

试试这个:

availability: function(element, value) {
  $.ajax({  
    type: "GET",  
    url: "/tunnel/availability.php",  
    data: "username="+element, 
    success: function(data){   
      if (data == "yes"){
         alert("found");
      }
     }  
  });
}

答案 1 :(得分:0)

为什么你认为它不起作用?如果您希望函数在提交表单之前检查并返回值,则很可能在执行ajax检查之前返回availability函数,允许您的表单提交并使警报无效 - 即,页面已经卸载并且正在处理新请求。如果您想在提交表单之前使用它来检查可用性,您需要:

  1. availability返回false(或以其他方式停止提交表单)
  2. availability成功函数提交表单。
  3. (也许)表示您期待的是文本响应,而不是html。
  4. 您还可以简化检查 - 在检查变量之前无需将“数据”放入变量中。我也不确定你为什么要将它添加到页面中,但这可能是合理的。我还建议对函数进行名称更改(如果您修改它以执行此操作)并通过AJAX处理表单提交 - 如果没有,您可以删除处理程序并只是在表单上触发提交。

    submitIfAvailable: function(form, element, value) {
      $.ajax({  
        type: "GET",  
        url: "/tunnel/availability.php",  
        data: "username="+element,
        dataType: 'text',  // I think it should work without this, but...
        success: function(data){   
          if (data == "yes"){
             $form = $(form);
             $.post( $form.attr('action'), $form.serialize(), function(result) {
                // process the result of form submission
             });
          }
         }  
      });
      return false;
    }
    

    我正在做一些假设 - 如果不符合availability函数的使用方式,则适当修改。要记住的关键是该函数将在之前返回 AJAX调用,并且您不能使用来自AJAX调用的函数的任何返回值。至少,如果您不通过将aSync选项设置为false来强制AJAX调用同步运行,则确实如此。

答案 2 :(得分:0)

您需要确认实际返回的可用性页面。 使用Firebug(或您喜欢的JS调试器)调试回调,以查看返回的data对象类型。您可能会发现您的返回值已被包装,例如,您可能需要检查data.value或类似的内容。