【问题标题】:POSTing variables to API (idibu) with AJAX使用 AJAX 将变量发布到 API (idibu)
【发布时间】:2013-07-04 03:02:11
【问题描述】:

我对 AJAX 和 API 调用还比较陌生,我正在对一家名为 idibu 的公司进行 POST API 调用,该公司负责处理招聘信息。它需要 POST 变量(不是 GET 变量),所以我使用的是“POST”类型的 AJAX。我使用的 POST 数据来自 idibu 文档,作为 API 调用的工作示例(它以 iso-8859-1 编码,这是必需的,可以在此处阅读:http://www.idibuworld.com/docs/xml-api-v3-examples)。我们已经提供了一个“哈希密钥”或 API 密钥,但我从这里的代码中取出(只是让您知道我在代码中正确输入了它)。这是我的代码:

<script>
$('.api_test').click(function(){

    var myData =
    'xml_text=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Cidibu%3E%0D%0A%3Cmethod%3Eadd%3C%2Fmethod%3E%0D%0A%3Cconfig%3E%0D%0A%3Cshow_durations%3Eno%3C%2Fshow_durations%3E%0D%0A%3Ccompletionurl%3Eemail%3C%2Fcompletionurl%3E%0D%0A%3Cadvertcompletionemail%3Ebob%40bob.com%3C%2Fadvertcompletionemail%3E%0D%0A%3Clockboards%3Eyes%3C%2Flockboards%3E%0D%0A%3Credirecturl%3Ehttp%3A%2F%2Fwww.google.com+%3C%2Fredirecturl%3E%0D%0A%3Cvalidate_level%3Ewarning%3C%2Fvalidate_level%3E%0D%0A%3C%2Fconfig%3E%0D%0A%3Cjob%3E%0D%0A%3Ctitle%3E%3C%21%5BCDATA%5BXML+v+3+test%2C+please+ignore+Special+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+-+%3A+%3B+_+%2B+%27+%22+%80%5D%5D%3E%3C%2Ftitle%3E%0D%0A%3Creference%3EABC123456789%3C%2Freference%3E%0D%0A%3Cdescription%3E%3C%21%5BCDATA%5B%3Cb%3ESpecial+Te+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+%2F+-+%3A+%3B+_+%2B+%27+%22+%27+here+euro+%80+%0D%0ABasic+Te+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+%2F+-+%3A+%3B+_+%2B+%27+%22+%27+%80+%0D%0ASpecial+Te+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+%2F+-+%3A+%3B+_+%2B+%27+%22+%27+%80+%0D%0A%0D%0A+%0D%0A+Special+Te+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+%2F+-+%3A+%3B+_+%2B+%27+%22+%27+%80+%0D%0ABasic+Te+%A3+%24+%26+%25+%40+%21+%3F+.+%2C+%3D+%29+%28+%2F+-+%3A+%3B+_+%2B+%27+%22+%27+%80+%0D%0A%0D%0A+%96+%96+%92+%27+%95+++++++%2C+%09%2C+%95+%B7+%93+%94+%D8+%85+%A8+%A6+%27+%3A+%27+%83+%E1+%91+%BA+%A1+%A7+%E9+%D7+%87+%27+%3A+%27+%27+%C7+%BD+%84+h+%AE+%97+%AC+%83+%E1+%99%3C%2Fb%3E%5D%5D%3E%3C%2Fdescription%3E%0D%0A%3Csender%3E%0D%0A%3Cname%3ESteve%3C%2Fname%3E%0D%0A%3Clastname%3ERogers%3C%2Flastname%3E%0D%0A%3Cemail%3Etest%40mail.net%3C%2Femail%3E%0D%0A%3Ccompany%3EOne+World+Market%3C%2Fcompany%3E%0D%0A%3Cphone%3E44+%280%29+111-1111111%3C%2Fphone%3E%0D%0A%3Cwww%3Ehttp%3A%2F%2Fuk.idibu.com+%3C%2Fwww%3E%0D%0A%3Ccountry%3EUK%3C%2Fcountry%3E%0D%0A%3Cpostcode%3E020+1111+1111%3C%2Fpostcode%3E%0D%0A%3C%2Fsender%3E%0D%0A%3Ccategory+id%3D%2221%22+%2F%3E%0D%0A%3Clocation+id%3D%228%22+%2F%3E%0D%0A%3Csublocation+id%3D%22668%22+%2F%3E%0D%0A%3Cjobtype+id%3D%222%22+%2F%3E%0D%0A%3Cjob_time%3E2%3C%2Fjob_time%3E%0D%0A%3Cstartdate%3E2011-11-26%3C%2Fstartdate%3E%0D%0A%3Cduration%3EFull+time%3C%2Fduration%3E%0D%0A%3Csalarymin%3E20000%3C%2Fsalarymin%3E%0D%0A%3Csalarymax%3E25000%3C%2Fsalarymax%3E%0D%0A%3Csalaryper+value%3D%22annum%22+%2F%3E%0D%0A%3CsalaryOverride%3ESalary+override+test+test%3C%2FsalaryOverride%3E%0D%0A%3Ccurrency%3EGBP%3C%2Fcurrency%3E%0D%0A%3Cpublish%3E2011-11-26%3C%2Fpublish%3E%0D%0A%3Cposts%3E%0D%0A%3Cboard+id%3D%22517%22%3E%0D%0A%3Cextrafield+name%3D%22idibudts_cat%22%3E3%3C%2Fextrafield%3E%0D%0A%3Cduration+days%3D%227%22+%2F%3E%0D%0A%3C%2Fboard%3E%0D%0A%3C%2Fposts%3E%0D%0A%3C%2Fjob%3E%0D%0A%3C%2Fidibu%3E';

    $.ajax({
        type: 'POST', // HTTP method POST or GET
        url: 'http://ws.idibu.com/clients/api/REMOTE/V3/[INSERT HASH KEY]', //Where to make Ajax calls
        dataType:'xml', // Data type, HTML, json etc.
        async:false,
        data:myData, //post variables
        contentType: "text/xml; charset=\"utf-8\"",
        success:function(response){

            $("#preForXMLResponse").html('<pre>'+response+'</pre>');

        },
        error:function (xhr, ajaxOptions, thrownError){
            alert('didn\'t work'); //throw any errors
        }
    });

});
</script>

现在,我不确定问题是否与传递的实际“数据”有关,因为它在 AJAX 调用上给了我一个错误(它会提醒我“不起作用”),这意味着它永远不会发布到任何地方。

就像我说的,我是新手,并且一直在阅读如何发送 POST 调用(过去我曾在其他项目中成功发送过 AJAX 调用)。这里有更多关于 idibu 的文档(http://www.idibuworld.com/docs/submitting-and-responses),但我不确定这是否只是我的语法错误。他们的 API 还没有很好的支持,所以我只是尽我所能对它进行分类。

感谢您的帮助!

编辑

当我尝试提交时,我在控制台上收到这些错误(同样,出于隐私目的,我正在编辑代码,但它在实际错误中显示了我的 URL 和 HASH KEY):

Failed to load resource: Origin http://[MY_SITE] is not allowed by Access-Control-Allow-Origin. http://ws.idibu.com/clients/api/REMOTE/V3/[INSERT HASH KEY]

XMLHttpRequest cannot load http://ws.idibu.com/clients/api/REMOTE/V3/[INSERT HASH KEY]. Origin http://[MY_SITE] is not allowed by Access-Control-Allow-Origin. 

在这个问题 (Origin 'url' is not allowed by Access-Control-Allow-Origin) 中,他们提到您不能对服务器外部的站点进行 AJAX 调用。我是否错误地接近了这个 POST 方法?这是在一个 PHP 页面上,所以你们都建议 cURL(我不精通它,这就是我尝试 jQuery AJAX 的原因)?

【问题讨论】:

  • 您应该检查浏览器网络选项卡上的错误(必须在 javascript 控制台上)。
  • @ocanal,谢谢。我已经用这些错误更新了我的问题。
  • 我确实找到了这篇文章:stackoverflow.com/questions/10143093/… 这可能有线索...
  • 您发布的那些链接需要身份验证。您是否尝试过使用 GET 请求加载该网址?仅出于调试目的,我会在浏览器中使用您的哈希键进行尝试。我之所以这么说是因为我想假设接受POST 的人至少会超过https
  • @vinodadhikary API 不支持 GET 请求。在他们的文档中,他们说它必须是 POST。我想这就是它的设置方式?

标签: jquery ajax api post


【解决方案1】:

编辑后包含错误信息的答案,

是的,不可能通过 ajax 从客户端请求的域不允许的另一个域发出请求。

有一些方法可以解决这个问题,

JSONP

我无法访问 idibu 的 API,所以我不知道它是否支持 JSONP。你应该检查文档,看看是否有。

CORS

您不能使用这个,因为在这种方法中,idibu API 必须允许您的域支持他们。我不会不提就通过这个。

cURL

正如您在编辑中提到的,如果您能够通过 cURL 发出此请求,请执行此操作。没有 Access-Control-Allow-Origin 之类的限制。

【讨论】:

  • 好的,非常感谢您提供的详细信息。这给了我一个很好的起点!
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多