2

我对 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. 

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

4

1 回答 1

1

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

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

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

JSONP

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

CORS

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

卷曲

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

于 2013-07-06T07:59:04.017 回答