【问题标题】:Convert a curl query to jQuery.ajax()将 curl 查询转换为 jQuery.ajax()
【发布时间】:2015-06-13 09:44:09
【问题描述】:

我有一个可以正常工作的 curl 命令。这是对返回 WDDX 的冷融合服务器的查询:

curl --user 'adminUser:adminPass' 'http://blablabla/app.cfc?method=isSusbscribed&newsletterId=2222&language=en&email=anemal@mail.com'

结果是:

<wddxPacket version='1.0'><header/><data><boolean value='true'/></data></wddxPacket>

这意味着使用给定电子邮件的用户会收到 ID 为 2222 的时事通讯。

现在,我正在尝试在 js 脚本中使用 Ajax 编写相同的命令:

我已经尝试过这样做:

$.ajax({url:'http://blablabla/app.cfc?method=isSusbscribed&newsletterId=2222&language=en&email=anemal@mail.com'
,username:'adminUser'
,password:'adminPass'})
      .done(function(res){
        jRes=$(res).find('boolean[value]');
        if(jRes.length == 1) inputElem.prop('checked', jRes.attr('value')=='true'); 
      }).always(function(res,text){
        console.log(res);
        console.log(text);
      })
      ;

但它不起作用。

我的目标是在用户注册时事通讯时将开关置于 ON 位置。

可能查询的语法不正确,我认为问题与身份验证有关。

有人可以帮助我吗? 谢谢

【问题讨论】:

  • 为什么不在服务器上进行调用?将硬编码的用户名和密码公之于众似乎是个坏主意?
  • 目前只是测试代码。用户凭据不会被硬编码。我只需要知道正确的语法。
  • 也是跨域调用吗?因为如果他们不支持 CORS,这会导致其他问题。
  • “它不起作用”是什么意思?发生什么了?与预期有何不同?如果您将其返回为 JSON 而不是您显示的 WDDX,则它可能更容易使用返回的数据。您可以简单地将&amp;returnFormat=JSON 添加到 AJAX 调用中的 URL。
  • console.log(res) 返回一个空对象,console.log(text) 返回“error”,开关没有按预期改变。

标签: javascript jquery ajax curl coldfusion


【解决方案1】:

很确定当您在 curl 请求中执行 --user 时,它使用的是基本身份验证。因此,您需要在 jQuery 调用中使用基本身份验证。您还需要对您的用户名和密码进行 Base64 编码。像这样的:

$.ajax({
  url:'...',
  beforeSend: function(xhr) { 
    xhr.setRequestHeader("Authorization", "Basic YWRtaW5Vc2VyOmFkbWluUGFzcw==");
  }
}).done(function(res){
  // handle success...
});

【讨论】:

  • 感谢您的回答,但它不起作用。我试过这个:` $.ajax({ url: 'http:.....&returnFormat=JSON', beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", "Basic"+btoa("user:pass "); // 或者这个 xhr.setRequestHeader("Authorization", "Basic user:pass"); }, success: function (data) { alert(JSON.stringify(data)); }, error: function(){ alert("Cannot get data"); } });` 我得到了错误。
  • 在控制台中我收到了这条消息(如 epascarello 所建议的)跨域请求被阻止:同源策略不允许在 http://...&returnFormat=JSON&_=1428501028107 读取远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。但我很困惑,因为如果我直接将 url 放入浏览器并提供用户名和密码,我会得到预期的值,所以 CORS (?) 不会有问题。我错过了什么?
  • 啊 - 所以这是一个 CORS 问题。您的浏览器受到限制,因此 JavaScript 只能访问与父网页相同的域。这样做是出于安全原因(XSS 攻击)。当你手动运行它时,你并没有使用 JavaScript 来请求它。
猜你喜欢
  • 2015-08-15
  • 2016-08-04
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多