【问题标题】:Calling WebService from Ajax/Javascript从 Ajax/Javascript 调用 WebService
【发布时间】:2011-05-04 17:53:54
【问题描述】:

我在这里遇到了一些麻烦。我使用 C# 创建了一个 Web 服务。当我调用 WebService 时,它​​工作正常。 Javascript 似乎正在访问 web 服务、中断,然后继续执行其余操作。我认为这是我错误地调用 WebService 的问题。我到处搜索,发现了很多不同的例子,但是,它们似乎都不起作用。

如果您转到http://success.darkslidedesign.com,它会触发 test.js,然后调用我位于此处的 Web 服务:http://www.darkslidedesign.com/services/ms_Alert.asmx

这里是 test.js 代码 -

var xmlHttp;
setTimeout("sendMessage('rory@careercheatcode.com');", 2000);
function doUpdate()
{
    if(xmlHttp.readyState===4){
        alert("Worked");
        }
    else{
        alert("Broke");
        }
}
function sendMessage(strTo)
{
    try{
        // Opera 8.0+, Firefox, Safari
        xmlHttp = new XMLHttpRequest();
        } catch (e){
        // Internet Explorer Browsers
        try{
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Ajax is not supported
                    return false;
                }
            }
    }   
    xmlHttp.open("post", "http://www.darkslidedesign.com/services/ms_Alert.asmx", true);    
    var params = "op=Sending_Email&strEmailAddrFrom=rory@darkslidedesign.com&strEmailAddrTo=" + strTo;
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", params.length);
    xmlHttp.setRequestHeader("Connection", "close");    
    xmlHttp.onreadystatechange=doUpdate;    
    xmlHttp.send(params);
    return false;
}

【问题讨论】:

  • 我强烈建议为此使用 jQuery 广泛而轻量的 AJAX 库:api.jquery.com/jQuery.ajax
  • Getting a readystate != 4 并不意味着它坏了;它只是意味着请求尚未完成加载。另外,请尝试使用两个等号而不是三个等号。
  • @lazycs:通常在 javascript 中,您应该始终使用 3 个等号来测试相等性。否则,由于类型强制,您最终可能会得到意想不到的结果。
  • @lazycs - 我知道它不会破坏它。这是虚拟文本。
  • 请注意问题不在于 DoUpdate 函数。我的问题出在下面的代码中。我需要以这种方式设置它,因为客户端只能在页面中包含一个 javascript 文件(指向 test.js),并且应该处理其余的。

标签: c# javascript ajax web-services


【解决方案1】:

你最好从 jQuery $.ajax() 开始 这是一个适用于我从文本框中发表评论的 sn-p。

function Post() {
         var ow = "username";
         var cmt = $("#comment").val();
         $.ajax(
         {
            type: "POST",
            url: "/comment/Save",
            dataType: "json",
            data: "id=2332&author=" + ow + "&cmt=" + cmt,
            success: function (result) {
               if (result.status === "OK") {
                  alert('Comment posted');
               }
               else
                  alert("Post failed");
            },

            error: function (req, status, error) {
               alert("Sorry! Post failed due to error");
            }
         });

      }

希望这将为您提供指导。 谢谢

【讨论】:

  • comment 是文本框的 id。您需要指定要发布到的网址
【解决方案2】:

对于来自 Javascript 的 Web 服务调用,我使用了两件事:

  1. jQuery,正如 pixelbobby 提到的。这是在公园里散步,让一切都变得超级棒!
  2. 我使用 asp.net MVC 框架。我在这里解释它太冗长了,但它很容易启动和运行。基本上,您创建一个控制器类,创建一些方法,并返回 json 序列化的值。您可能还需要在 global.asax 文件中添加一些路由。

我绝对会推荐阅读这两件事......它们都非常棒!

【讨论】:

  • 您好,感谢您的意见。但是,为了方便客户端,我需要触发对 javascript 文件的单个调用。然后,这将触发完成其余工作的 Web 服务。我相信,问题在于 XMLHttp 对象的 sendUpdate 函数结束。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多