2013-05-28 68 views
1

嗨,我有以下代码表单提交REST API

var dataString = "[email protected]&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

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

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

当通过浏览器执行的串(直禁止复制粘贴)它完美的作品。它显示了相应的消息。

但是,当我执行代码时,它总是返回错误。有谁知道为什么发生这种情况?

干杯,

+0

难道它与你的部分数据在网址中有关吗?即,将method = add_reservation移动到数据字符串中。 – Andy

+0

可能是用url编码的东西? –

+0

@Andy这是一个GET请求,所以他应该能够通过查询字符串传递它,除非该网站的API明确表示不这样做。我们需要更多地了解他所接受的“错误”。 – crush

回答

1

该问题的API不是RESTful。

无论如何,你的问题是多种因素的综合。它肯定是不是是API实际引发错误,因为所有错误都返回为200状态代码。 (不是RESTful Point#1)。因此,即使活跃地返回了一个错误,它仍然可以算作jQuery处理程序上的成功。

没有特定的顺序:

这是发生故障的唯一的事情!这也完全阻止了jQuery的使用。您需要做出选择来绕过这一点,这可能包括也可能不包括:

  • 本地代理API。如果你的web服务器运行得很好,这要归功于Apache或者nginx。对于Apache,使用ProxyPassReverseProxyPass指令使用mod_proxy,或使用带有[P,L,QSA]标志集的重写规则。在nginx上,使用proxy_pass指令。如果您无权访问,请使用curl通过PHP进行代理。
  • 给API的开发者一个耳光,以便他们能够简单地添加Access-Control-Allow-Origin: *的头,这将使你的工作随叫随到
  • 给API的开发者一个耳光,以便让他们支持JSONP

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

+0

downvoter实际上可以说他们为什么downvoted? –

+0

尝试完你的解决方案后,它确实有道理。我不知道为什么它被低估。所以基本上,除了你提到的那些之外没有其他解决办法(考虑到我没有任何方法来修改上述API)?恕我直言,我不鼓励使用CURL。 – Jeremy

+0

我应该打开关于此的另一个问题。但无论如何,我如何从这个URL得到返回的消息? – Jeremy