1

嗨,我有以下代码

var dataString = "email=jdoe@example.com&fname=John&lname=Doe&phone=7851233&vid=726&size=2&date=2013-05-28%202:15%20PM&request=Testing%20A%20Message";
$.ajax({  
    type: "GET",
    timeout: 5000,
    url: "http://www.livepicly.com/app/api.php?method=add_reservation",  
    data: dataString,  
    success: function(data, textStatus) {
        alert(data.result);
    },
    error: function(xhr, textStatus, errorThrown){
        alert("ERROR");
    }
});  
return false;

基本上我想向这个 URL 提交一段字符串: http ://www.livepicly.com/app/api.php?method=add_reservation

格式化的字符串(由萤火虫显示)是这样的:

http://www.livepicly.com/app/api.php?method=add_reservation&email=jdoe@example.com&fname=John&lname=Doe&phone=7851233&vid=726&size=2&date=2013-05-28%202:15%20PM&request=Testing% 20A%20留言

当通过浏览器(直接复制粘贴)执行字符串时,它可以完美运行。它显示了相应的消息。

但是,当我执行代码时,它总是返回错误。有谁知道为什么会这样?

干杯,

4

1 回答 1

1

有问题的 API 不是 RESTful。

无论如何,您的问题是多种因素的组合。绝对不是API 实际抛出错误,因为所有错误都以 200 个状态码的形式返回。(不是 RESTful 第 1 点)。因此,即使 livepicly 返回了一个错误,它仍然会在 jQuery 处理程序上被视为成功。

没有特别的顺序:

那是唯一失败的事情!这也完全阻止了 jQuery 的使用。您需要做出选择来解决这个问题,这可能包括也可能不包括:

  • 在本地代理 API。如果您的网络服务器通过 Apache 或 nginx 运行,这将是微不足道的。对于 Apache,使用ProxyPassReverseProxyPass指令 using mod_proxy,或使用带有[P,L,QSA]标志集的重写规则。在 nginx 上,使用proxy_pass指令。如果您都无法访问,请使用curlPHP 代理它。
  • 给 API 的开发人员一记耳光,以便他们简单地添加Access-Control-Allow-Origin: *到标题中,这将使您的调用正常工作
  • 给 API 的开发者一记耳光,让他们支持 JSONP

总的来说,只需将他们指向https://en.wikipedia.org/wiki/Representational_state_transfer并给他们一记耳光。请?

于 2013-05-28T14:50:02.403 回答