3

我有一个 REST 服务 API,我试图从包含 GET 和 POST HTTP 请求的 Javascript 访问它,并且我很难从包含请求正文的 Javascript 中获取 POST 命令。

我可以使用 Fiddler 生成 POST 请求并获得有效响应,但我无法弄清楚如何在 Javascript 中编写类似的代码。

Fiddler 请求的示例如下:

http://api.mydomain.com/xml/accounts/authenticate?api_key=12345678-1234-1234-1234-123456789012
Request Header:
Host: api.mydomain.com
content-type: text/xml
Content-Length: 123

Request Body:
<Authentication xmlns="http://schemas.mydomain.com/authentication">
 <Firstname>Joe</Firstname>
 <Lastname>Blow</Lastname>
</Authentication>

当我执行此操作时,Fiddler 显示以下原始数据:

POST http://api.mydomain.com/xml/accounts/authenticate?api_key=12345678-1234-1234-1234-123456789012 HTTP/1.1
Host: api.mydomain.com
content-type: text/xml
Content-Length: 143

<Authentication xmlns="http://schemas.mydomain.com/authentication">
 <Firstname>Joe</Firstname>
 <Lastname>Blow</Lastname>
</Authentication>

这是我在 Jquery Ajax 调用中进行相同调用的最佳尝试。

function accessArctos() {
$.ajax({
    url: 'http://api.mydomain.com/xml/accounts/authenticate?api_key=12345678-1234-1234-1234-123456789012',
    type:"POST",
    data: '<Authentication xmlns="http://schemas.mydomain.com/authentication"><Firstname>Joe</Firstname><Lastname>Blow</Lastname></Authentication>',
    error: function() { alert("No data found."); },
    contentType: "text/xml",
    success: function (response) {
        alert('Success Auth Token:' + response);
    }
});
}

当我执行此代码时,Fiddler 显示原始数据如下:

OPTIONS http://api.mydomain.com/xml/accounts/authenticate?api_key=12345678-1234-1234-1234-123456789012 HTTP/1.1
Host: api.mydomain.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://localhost:52381
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

我不确定为什么请求正文没有出现。我不知道 Jquery ajax 调用是否是处理此类请求的最佳方法。任何帮助,将不胜感激!

谢谢!

4

1 回答 1

0

查看响应文本

success: function (response, status, xhr) {
    console.log(xhr.responseText);
    alert('Success Auth Token:' + response);
}

您可能会在那里看到正确的文本,但 responseXml 将为空,因为文档无效。

为什么?因为你错过了这条线

<?xml version="1.0" encoding="ISO-8859-1"?>

这将使它成为一个有效的 XML 文档

于 2013-06-05T13:56:51.717 回答