【问题标题】:localhost to different domain not passing credentials本地主机到不同的域不传递凭据
【发布时间】:2013-07-07 07:05:45
【问题描述】:

我有一个用于调用网页的 ajax 调用,我想得到结果。它的问题在于它似乎不起作用,并且目前返回 jQuery 解析错误

当我查看调试控制台并单击时,它会将我带到我想要的页面,它似乎并没有通过 ajax 完成并存储结果/调用成功。

我的代码:

$.ajax({
  type: "GET",
  url:  "mywebsite",
  data: {username: username, password:password},
  dataType: "jsonp",
  contentType: "application/json",
  xhrFields: {withCredentials: true},
  crossDomain: true,
  success: function(result, status, jqxhr){ alert("success"); },
  error: function(xhr, status, message){ alert(status + ": " + message); }
});

如您所见,我有一些要添加到其中的凭据,并且我被告知将其包含在数据中,而不是为 usernamepassword 执行 ajax 选项em>。

我不确定发生了什么事,似乎有什么问题。我通过堆栈溢出查看了 3 种不同的方法,但似乎都没有给我正确的答案。

发布的数据

 Request URL:http://10.224.65.5/mas3/DataSources/inspecttech.inspecttech/Schema/Classes?callback=jQuery17202808878293726593_1373384418801&username=njtax.hinspecttech&password=4e1cb7494843c513ee913d122e30ef2fe27635e5f82f575c92d006691906bebbbdb1fe483cfc06b087f7c4070c2879bd3585234a3614a1f04fca8de64ad6bfaf&_=1373384423017
 Request Method:GET
 Status Code:200 OK
 Request Headersview source

请求标头

 Accept:*/*
 Accept-Encoding:gzip,deflate,sdch
 Accept-Language:en-US,en;q=0.8
 Authorization:Basic bmRvdG1vYnguaG1vYmlsZWRldmljZTpzdXBlclNlY3JldERldmljZVBhc3N3b3Jk
 Connection:keep-alive
 Host:10.224.65.5
 Referer:http://localhost:3033/BentleyFormIntegrationFrameset.aspx
 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36

查询字符串参数查看源查看 URL 编码

 callback:jQuery17202808878293726593_1373384418801
 username:njtax.hinspecttech
 password:4e1cb7494843c513ee913d122e30ef2fe27635e5f82f575c92d006691906bebbbdb1fe483cfc06b087f7c4070c2879bd3585234a3614a1f04fca8de64ad6bfaf
 _:1373384423017
 Response Headersview source

响应标头

 Cache-Control:no-cache
 Content-Language:en-US
 Content-Length:801
 Content-Type:application/json; charset=utf-8
 Date:Tue, 09 Jul 2013 15:40:22 GMT
 Expires:-1
 Mas-License-Error-Id:NoClientLicense
 Mas-License-Error-Message:Client's license is invalid.
 Pragma:no-cache
 Server:Microsoft-IIS/7.5
 X-AspNet-Version:4.0.30319
 X-Powered-By:ASP.NET

其他信息

预览(在 Google Chrome 中)显示返回的对象,但我不确定它为什么会失败。看起来它正确获取了所有内容。

通过 ASP 的可能替代选项?

HttpWebRequest request = HttpWebRequest.Create(Request.Url.Scheme + "://" + site +"/DataSources/inspecttech.inspecttech/Objects/DeviceDatabase/" +action) as HttpWebRequest;

NetworkCredential cred = new NetworkCredential(bic_name + "x.h" + user.in_username, user.in_password);
request.Credentials = cred;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
string resp = "";
StreamReader reader = new StreamReader(response.GetResponseStream());
while (!reader.EndOfStream)
    resp += reader.ReadLine();

【问题讨论】:

  • 您是否在任何地方定义了usernamepassword
  • contentType, xhrFields, crossDomain,type, 和error 可以删除,它们与jsonp请求无关。如果它不起作用,请转到您的控制台和网络标签并检查请求。在您的问题中发布请求响应标头以及responseText 的示例。
  • “预览(在谷歌浏览器中)显示返回的对象,但我不确定它为什么会失败。看起来它正确获取了所有内容。” “返回的对象”看起来像?我对前 50 个字符左右感兴趣。应该是:jQuery17202808878293726593_1373384418801(...jsonhere...) 如果不是这样,那么它不是 JSONP。
  • 不行,如果是跨域,就无法访​​问iframe的内容。
  • 您的 ASP(与您的页面在同一个域中的那个)应该向跨域资源发出请求。

标签: javascript jquery asp.net ajax cross-domain


【解决方案1】:

我一直在为同样的错误而苦苦挣扎,所以我找到了一篇关于 ASP.NET 的 CORS(跨源资源共享)的博客文章。作者还发布了使用 ASP.NET Web.API 和 AJAX 调用与 JQuery 的完整解决方案。

博文:http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api-rc-version.aspx

代码:http://code.msdn.microsoft.com/CORS-support-in-ASPNET-Web-01e9980a

【讨论】:

  • 非常感谢。当我完成当前任务时,我会看看它。 :)
【解决方案2】:

我假设你还没有定义username & password

我不确定您希望这些来自哪里。一方面,您可能需要从他们的字段中获取这些信息,在这种情况下,您需要这样的内容:

$.ajax({
  type: "GET",
  url:  "mywebsite",
  data: {username: $('#username').val(), password:$('#password').val()},
  dataType: "jsonp",
  contentType: "application/json",
  xhrFields: {withCredentials: true},
  crossDomain: true,
  success: function(result, status, jqxhr){ alert("success"); },
  error: function(xhr, status, message){ alert(status + ": " + message); }
});

这将从字段中获取值,假设它们是#username & #password

或者,您只想将它​​们作为字符串传递,在这种情况下您会这样做:

data: {username: 'username', password:'password'},

上面只会发布一个值 username 和值 username 和密码。

【讨论】:

  • 小错误:password:$('#password').val() 你使用了 # 而不是 '
  • 没有面向公众的表格。它们是硬编码的 JS 变量,称为 username 和 pw,它们已正确分配。生病检查确认虽然
  • 那么有没有js错误呢?如果有为我们弹出它们:)
  • 控制台中没有错误。我目前唯一的队列是错误说 parseerror: Error: jQuery.... was not called
  • 好的,那就忽略我的回答;)好吧,你能把你的整个 js 脚本放到 jsfiddle.net 上吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多