【问题标题】:how to consume web services (own project) from html page如何从 html 页面使用 Web 服务(自己的项目)
【发布时间】:2011-03-03 15:42:05
【问题描述】:

我有一个名为 (WS_Service) 的 Web 服务项目 我有一个试图使用 WS_Service 的 html 页面。

我有 Web 服务位于它自己的项目中(我创建的原因是因为它是独立的,可以从 .aspx 或 .html 或移动设备调用)

我对 .aspx 没有任何问题,我只是添加了引用并启动了服务。

但我不确定我将如何在下面的 .html 页面上做我正在尝试发布到 Web 服务的代码:

 $.ajax({ 
      type: "POST", 
      url: "http://myhostname/Delete.asmx/DeleteCustomer",  <<< is that right?
      data: "{CustID: " + parseInt(customer_id) + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
                     AjaxSucceeded(msg); 
               }, 
      error: AjaxFailed 
 }); 

有什么建议吗?

【问题讨论】:

  • 这段代码有什么问题?你有错误吗?您预计会发生什么,实际结果是什么?
  • 好的,这就是我得到的 Fiddler:对 school_ws 的 DNS 查找失败。没有这样的主机是已知的

标签: jquery asp.net web-services


【解决方案1】:

首先,您不能使用 AJAX 发布到另一个域上的表单。因此,当 JavaScript 在 domain2.com 上运行时,请确保您没有尝试 POST 到 domain1.com。

假设他们在同一个域上,你就很接近了,但是如果你试图将 JSON 发布到使用 jQuery 我会做这样的事情:

var data = {
    CustID: parseInt(customer_id)
};

$.post("http://myhostname/Delete.asmx/DeleteCustomer", {data: JSON.stringify(data)}, function(response) {
  //success
});

这将通过您的 JSONified 对象在服务器端名为 data 的 POST 变量中发送。

不要尝试自己在字符串中构建 JSON,如果您开始发送复杂的数据会变得非常混乱。这就是他们发明 JSON 函数的原因。 $.post 只是$.ajax 的一个快捷方式,其中已经配置了一些默认的东西,应该可以供您使用。如果您确实需要捕获 AJAX 错误(如 HTTP 状态代码),请查看 $.ajaxError 作为补充。

如果您支持没有 JSON.stringify 和 JSON.parse 函数的旧版浏览器,您可以在页面中包含一个简单的 JSON 兼容性脚本,例如 https://github.com/douglascrockford/JSON-js

【讨论】:

  • 没有必要调用 JSON.stringify,因为 jQuery 会为您完成。
  • 都在同一个域,好吧我尝试发帖没有得到任何东西,如何捕捉成功或失败?
  • @Pointy 哦,我不知道。我想如果你传递一个对象,jQuery 会把它变成 POST 变量,而不是 JSON 字符串?
  • @Abu Hamzah 您是否尝试过使用 Firebug (getfirebug.com)?它将准确地向您显示 Javascript 和您的服务器之间来回传递的内容。无论您的服务器返回什么(只要它返回 200 OK HTTP 响应代码)都将存储在成功函数的 response 变量中。
  • 我忘记了那个 FF,但我想显示我从 WS 获得的响应并将其显示给用户。
【解决方案2】:

我强烈怀疑这一行:

  data: "{CustID: " + parseInt(customer_id) + "}", 

应该涉及一个对象,而不是一个字符串:

  data: { CustID: customer_id },

或者可能:

  data: { CustID: parseInt(customer_id, 10) },

【讨论】:

  • 是的,我对此的解释是他们试图自己构建一个 JSON 字符串。
  • 我不确定我是否正确,但是如果您查看 api 文档,它说可以使用该字符串,因为它实际上在发送时默认更改:“数据选项可以包含 key1=value1&key2=value2 形式的查询字符串,或 {key1: 'value1', key2: 'value2'} 形式的映射。" api.jquery.com/jQuery.ajax
  • @TBohnen.jnr 是的,但是 OP 中的内容不是查询字符串。
  • 谢谢,有点累,我现在可以看到错误了:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多