将表单提交到REST API

时间:2013-05-28 14:09:55

标签: ajax jquery rest

您好我有以下代码

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;

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

格式化的字符串(由firebug显示)如下所示:

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%20Message

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

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

干杯,

1 个答案:

答案 0 :(得分:1)

有问题的API不是RESTful。

无论如何,你的问题是各种因素的综合。它确实是 NOT 是实际抛出错误的API,因为所有错误都返回为200状态代码。 (不是RESTful Point#1)。因此,即使livepicly返回错误,它仍然算作jQuery处理程序的成功。

没有特别的顺序:

这是唯一失败的事情!这也完全阻止了jQuery的使用。你需要做出选择来绕过这个,可能包括也可能不包括:

  • 在本地代理API。如果你的网络服务器运行得益于Apache或nginx,这是微不足道的。对于Apache,使用ProxyPass使用ReverseProxyPassmod_proxy指令,或使用带有[P,L,QSA]标志集的重写规则。在nginx上,使用proxy_pass指令。如果您无法访问,请使用curl通过PHP代理它。
  • 为API的开发人员提供一记耳光,让他们只需将Access-Control-Allow-Origin: *添加到标题中,这样就可以让您的通话工作
  • 为API的开发人员提供一个支持,以便他们支持JSONP

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