使用AJAX将变量发布到API(idibu)

时间:2013-07-06 00:49:14

标签: jquery ajax api post

我对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)?

1 个答案:

答案 0 :(得分:1)

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

是的,无法通过客户端所请求域名不允许的其他域的Ajax发出请求。

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

JSONP

我无法访问idibu的API,所以我不知道是否支持JSONP。您应该检查文档并查找是否存在。

CORS

你不能使用这个,因为在这种方法中,idibu API必须允许你的域名。我不会在没有提及的情况下通过这个。

cURL

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