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

Jquery 使用AJAX将变量发布到API(idibu),jquery,ajax,api,post,Jquery,Ajax,Api,Post,我对AJAX和API调用比较陌生,我正在为一家名为idibu的公司进行POST-API调用,该公司负责处理职位公告。它需要POST变量(而不是GET变量),因此我使用的是带有“POST”类型的AJAX。我使用的POST数据来自idibu文档,作为API调用的工作示例(它在iso-8859-1中编码,这是必需的,可以在此处阅读:)。我们已经提供了一个“散列键”或API键,但我在这里删除了代码(只是让您知道我在代码中正确地输入了它)。这是我的密码: <script> $('.api_te

我对AJAX和API调用比较陌生,我正在为一家名为idibu的公司进行POST-API调用,该公司负责处理职位公告。它需要POST变量(而不是GET变量),因此我使用的是带有“POST”类型的AJAX。我使用的POST数据来自idibu文档,作为API调用的工作示例(它在iso-8859-1中编码,这是必需的,可以在此处阅读:)。我们已经提供了一个“散列键”或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方法?这是一个PHP页面,所以请大家建议使用cURL(我不太熟悉它,这就是我尝试jQuery AJAX的原因)?

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

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

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

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

您不能使用这个方法,因为在这个方法中,idibu API必须允许您的域站在他们这边。我不会不提就把这件事传出去的


正如您在编辑中提到的,如果您能够通过cURL发出此请求,那么就这样做。没有访问控制允许来源这样的限制。

您应该在浏览器的“网络”选项卡(必须在javascript控制台上)上检查错误。@ocanal,谢谢。我已经用这些错误更新了我的问题。我确实发现了这篇文章:其中可能有线索……你发布的那些链接需要身份验证。您是否尝试使用GET请求加载该url?为了调试的目的,我会用你的哈希键在浏览器中尝试。我之所以这么说,是因为我想假设接受
POST
的人至少会在
https
@vinodadhikary上这样做。API不支持GET请求。在他们的文档中,他们说它必须是POST。我想这就是它的设置方式?好的,太好了,谢谢你提供的细节。这给了我一个很好的起点!
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.