【发布时间】:2014-05-17 18:05:19
【问题描述】:
我已经使用Restler 2 使用简单的REST API 构建了我的服务器。现在我尝试使用AJAX 从本地主机向该API 发出POST 请求,我看到之前发送了OPTIONS 请求,而Restler 没有处理它。
我添加了这个
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, PATCH, DELETE');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: *');
到我的服务器的index.php,正如为 Restler 3 建议的here 一样,但这并没有解决它。
我还查看了this question 并尝试了最后两个答案的建议(与以前几乎相同),但也没有用。我真的需要使用jsonp(第一个答案提到的问题)吗?实际上发送GET 请求而不是POST 不是很尴尬吗?
我的 AJAX 调用:
$.ajax({
type: "post",
url: "http://{MY_URL}/index.php/paint",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(data),
success: function(data){
console.log("post success " + data);
},
error: function(xhr,err){
console.log("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
console.log("responseText: "+xhr.responseText);
console.log(err);
}
});
输出是:
OPTIONS http://{MY_URL}/index.php/paint 404 (Not Found) jquery-1.10.2.js:8706
XMLHttpRequest cannot load http://{MY_URL}/index.php/paint. Invalid HTTP status code 404
【问题讨论】:
-
问题也可能是其他问题。当一切都在同一个域中时,您是否确保它们正常工作?
-
@Luracast 是的。使用本地主机上的服务器,它工作得很好。可能我无法在服务器上发送标头,因为我无法配置它,并且不允许我发送其他标头? (不过不确定)。
-
@Luracast 如果我遵循此选项github.com/Luracast/Restler/issues/17,添加新的支持格式,这意味着我必须将我的“假定”
POST请求作为GET请求处理?我看到了这些例子,我得到了它的工作,但它们是GETrequests。我现在如何处理POST请求? -
您坚持使用 Restler 2 是否有特定原因? Restler 3 已经有
JsFormat(JSONP) 和简单的选项来打开 CORSDefaults::$crossOriginResourceSharing = true; -
是的,我的主机的 PHP 版本已经很老了。不过,我找到了解决方案,稍后会发布。
标签: ajax rest cross-domain restler