我有这个服务器端 SLIM 代码:
require 'Slim/Slim.php';
$app = new Slim();
//$app->config('debug', true);
$app->get('/hello', 'hello');
//$app->post('/addConsultant', 'addConsultant');
$app->run();
function hello() {
echo '{"hello": ' . json_encode("merp") . '}';
}
漂亮的骨头吧?我的意思是它只是一个 GET。
现在,我有这个客户端Javascript代码:
var rootURL = "http://somabsolutions.se/dev/index.php/";
$('#btnHello').click(function() {
$.ajax({
type: 'GET',
url: rootURL + '/hello',
dataType: "text json",
success: function(data){
alert("Something " + data);
},
error: ajaxFailed
});
return false;
});
function ajaxFailed(XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "'ntextStatus=" + textStatus + "'nerrorThrown=" + errorThrown);
}
也很容易。
我有这个HTML的东西,它包含绑定到jQuery的AJAX调用的按钮:
<!DOCTYPE HTML>
<html>
<head>
<title>
Backend test
</title>
</head>
<body>
<form id="testForm">
<button id="btnHello">Hello World</button>
</form>
<script src="javascript/jquery-1.7.2.min.js"></script>
<script src="javascript/main.js"></script>
</body>
</html>
这些东西,曾经有效,直到今天,由于某种外星原因,它停止这样做了!
看,它有效,对吧?
但是每次我按下那个HTML按钮时,Ajax都会认为调用失败并将我重定向到错误函数,该函数除了空白错误消息外无法为我提供任何内容。
这有什么问题?几天前效果很好!
您的问题可能是您的根 URL 以/
结尾,并且您在添加的 url 的开头再次出现/hello
(因此将请求 URL root//hello
),或者dataType: "text json"
也可能有问题。我总是只使用对我有用的dataType: "json"
。
另外(但这只是一个格式化问题)你可以使这一行更像PHP风格:(我知道它更多的代码,但我认为它更容易阅读,看起来更像PHP... :D)
echo '{"hello": ' . json_encode("merp") .'}';
如果将其更改为:
echo json_encode( array("hello" => "merp") );
好的,我认为一定是浏览器或服务器出了问题,因为现在它可以工作了......因此,如果您遇到此问题,请尝试清除所有Chrome数据。
怪得要命。
不过感谢您的帮助!
好的,现在我肯定知道出了什么问题,问题是我试图对与当前打开的 URL 不同的 URL 进行 REST 调用,我试图从http://www.something.com/argument
调用http://something.com/argument
显然,这足以让 JavaScript 认为它是一个跨域调用,但实际上并非如此。
JQuery 中有一个参数 -
jQuery.support.cors = true;
这应该允许跨域调用,或者至少是javaScript认为的跨域调用,但它对我没有任何作用。我只需要确保 REST 调用来自正确的 URL。