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