Javascript 使用{“readyState”4、“status”200、“statusText”:“success”进行错误回调

Javascript 使用{“readyState”4、“status”200、“statusText”:“success”进行错误回调,javascript,ajax,jquery,Javascript,Ajax,Jquery,我有这个url电话。url按预期返回一个json对象(直接浏览器调用),但当我通过ajax执行此操作时 $.ajax({ url: url, type: "GET", dataType:"jsonp", success: function(data) { alert(data); }, error : function(error) { alert("no good

我有这个
url
电话。url按预期返回一个json对象(直接浏览器调用),但当我通过ajax执行此操作时

$.ajax({
       url: url, 
       type: "GET",
       dataType:"jsonp",   
       success: function(data) {
          alert(data);
       },
       error : function(error) {
          alert("no good "+JSON.stringify(error));
       }
});
它还我

no good {"readyState":4,"status":200,"statusText":"success"}

我知道在stackoverflow上还有其他类似的问题,但似乎没有人解决它。

这表明HTTP请求成功,但解析数据的尝试没有成功


i、 e.数据未格式化为JSONP。

这些更改解决了我的问题

//服务器端

echo $_GET['callback'] . '('.json_encode($data_to_encode).')';
//js


我刚刚收到了完全相同的问题,{“readyState”:4,“status”:200,“statusText”:“success”}


这是因为我忘了在php脚本中删除回音“hello”;我之前出于测试原因所做的声明,所以我的php脚本发送一个字符串和JSON,这是我愚蠢的错误,也许你也犯了同样的错误

你验证了响应数据吗?如果它返回json,那么数据类型应该是json而不是jsonpDo你的url中有
&callback=?
吗?你能使用Firebug或类似的工具(比如Chrome或Safari的内置开发工具)吗捕获实际的响应正文和内容类型响应标题,然后与我们共享?是的,这解决了我的问题!谢谢@mccannfIf这是您的服务器,那么您为什么要以JSONP的形式发送响应呢?服务器是否从其他域托管?是。服务器位于不同的域中。它是一个“api”域,javascript是移动应用程序的一部分。但它只是不同的子域吗?换句话说,它是
api.example.com
vs
www.example.com
?如果是这样的话,你仍然可以避免JSONP。我在移动应用程序中使用钛合金。因此,移动应用程序和网站将成为主流。移动网站域(现在api是子域)将是另一个域。例如:现在域名是api.example.com,移动应用程序的测试版本是www.example.com,但一旦应用程序完成,它将被移动到www.appdomain.com。这对我来说不是问题。正如我在回答中所解释的那样!所以,如果ajax可以在错误消息中这样说,那么很容易找到答案。。。。这是一个典型的“程序员的事情”…JS控制台可能有一个更有用的错误消息…但JSONP首先是一个可怕的黑客(谢天谢地,我们现在有CORS,所以我们不再需要使用JSONP)。
$.ajax({
       url: url+"?callback=?", 
       type: "GET",
       dataType:"jsonp",   
       success: function(data) {
          alert(data);
       },
       error : function(error) {
          alert("no good "+JSON.stringify(error));
       }
});