1

我在 html 页面中有一个按钮。

<input type="image" src="images/login_button.png" id="imageButton" onclick="LoginButtonClick();" />

我在单击按钮时调用此方法:

LoginButtonClick = function() {
    alert ("Button click event raised");  // this alert msg raising every time when onclick event occurs.
    $.ajax({  
        alert ("Inside Ajax.");  // This alert not executing first 1 or 2 times.
        type: 'GET',
        url: 'http://URL/Service.svc/LoginValidation',
        dataType: 'json',
        error: pmamml.ajaxError,
        success: function(response, status, xhr) {
            if (response != "") {
                alert ("Response receive ");
                }
            else {
                alert("Invalid Data.");
            }
        }
    });
}

正如我上面提到的,$.ajax首先 2 、 3 按钮单击尝试不起作用。

在 mozilla 中,它会抛出错误“[Exception...”组件返回失败代码:0x80004005 (NS_ERROR_FAILURE)”nsresult:“0x80004005 (NS_ERROR_FAILURE)”位置:“JS frame :: JQuery.js :: :: line 20”数据:不]”

有没有办法解决这个问题。。

4

4 回答 4

6

我不确定它为什么稍后执行。但这是交易 - 您将警报放置在定义 .ajax 方法的参数的对象文字中。它不属于那里。尝试将警报放入您的成功和/或错误处理程序中。

更新

你要等多久?当您发起一个 ajax 请求时,它不会挂起 UI。可能是您在第 3 次或第 4 次尝试时看到了第一次点击的结果,并认为您在第 3 次或第 4 次尝试时触发了它。

于 2012-07-10T15:45:04.013 回答
0

注意-如果域不是当前域,则输入绝对路径不起作用-浏览器也遵守同源策略-这可以解释为什么执行时没有任何反应-我建议您查看浏览器调试器核实。

您应该像这样绑定点击事件:

$(document).ready(function() {
  $('#imageButton').click(function() {
    // code here
  });
});

所以您的完整代码将如下所示:

HTML

<input type="image" src="images/login_button.png" id="imageButton" />

JavaScript

$(document).ready(function () {
  $('#imageButton').click(function () {
    alert("Button click event raised"); // this alert msg raising every time when onclick event occurs.
    $.ajax({
      type: 'GET',
      url: 'http://URL/Service.svc/LoginValidation',
      dataType: 'json',
      error: pmamml.ajaxError,
      success: function (response, status, xhr) {
        if (response != "") {
          alert("Response receive ");
        } else {
          alert("Invalid Data.");
        }
      }
    });
  });
});

我已经删除了该alert ("Inside Ajax.");行,因为这不会被执行 - 你传递一个{}参数对象而不是要执行的代码。如果要在发送 ajax 请求之前执行,请执行以下操作:

$.ajax({
   beforeSend: function() {
     alert('inside ajax');
   }
   // other options here
});

该功能的文档在$.ajax()这里

于 2012-07-10T16:05:45.773 回答
0

我同意您将第二个警报放在错误的位置,并且不知道 pmamml.ajaxError 函数是什么,但可能是您的调用返回错误,因此您的成功警报没有触发。您可以检查错误和完成功能如下:

LoginButtonClick = function() {
alert ("Button click event raised");  // this alert msg raising every time when onclick event occurs.
$.ajax({  
    type: 'GET',
    url: 'http://URL/Service.svc/LoginValidation',
    dataType: 'json',
    error: function(jqXHR, textStatus, errorThrown){
          alert ("ajax call returns error: " + errorThrown);
    },
    success: function(response, status, xhr) {
        if (response != "") {
            alert ("Response receive ");
            }
        else {
            alert("Invalid Data.");
        }
    },
   complete:function(jqXHR, textStatus){
         alert('completed with either success or fail');
    }
});

}

如果发出并返回请求,您可以使用 Google Chrome 的开发者工具 -> 网络选项卡进行测试(https://developers.google.com/chrome-developer-tools/docs/network)

于 2012-07-10T19:14:24.760 回答
0

$.ajax()函数接收一组配置 Ajax 请求的键/值对作为参数。我不认为把它alert()放在那里语法是正确的。

于 2012-07-10T15:46:43.430 回答