【问题标题】:Function didn't trigger?函数没有触发?
【发布时间】:2014-04-24 04:32:59
【问题描述】:

我的 js 中有这个 ajax 调用。通过这个请求,我想知道是否有以前打开的会话,在这种情况下,它将显示登录表单。

所以,如果没有以前的会话,服务器返回错误 400 错误请求(laravel 响应类)。但是当服务器返回时,$.ajax 对象并没有触发错误函数。有谁知道为什么?

服务器响应

$data =[
  'error' => [
    'message' => 'Authentication Error',
    'statusCode' => 400
  ]
]
Response::json($data, 400, [])
  ->setCallback(Input::get('callback'));

Ajax 请求

$.ajax({
  global: true,
  method: 'POST',
  dataType: 'jsonp',
  url: 'http://localhost:8082/api/checkAuth?callback=?',
  success: function(response) {
    return console.log(response);
  },
  error: function(a, b, c) {
    console.log(a);
    console.log(b);
    return console.log(c);
  }
});

我也尝试过获取状态码来触发功能,但它无论如何都不起作用:

** Ajax 请求 **

$.ajax({
  global: true,
  method: 'POST',
  dataType: 'jsonp',
  url: 'http://localhost:8082/api/checkAuth?callback=?',
  success: function(response) {
    return console.log(response);
  },
  statusCode:{
    400: function(a,b,c){
      console.log(a);
      console.log(b);
      console.log(c);
    }
  }
});

谢谢大家的帮助

一些更新:

感谢 manish,我发现了这个 plugin 用于处理 jsonp 请求,它触发了错误功能。有谁知道如何在错误函数中捕获返回的状态码?

【问题讨论】:

  • 在浏览器中按F12 并选择“网络”选项卡以检查服务器是否真的在应答以及js 得到的状态码是什么。
  • 已经完成,请求响应 400,如果我将服务器的响应代码更改为 200,成功函数就会像魅力一样触发。
  • return console.log(response); return 没有意义。
  • coffeescript就是这样编译的

标签: javascript php jquery ajax jsonp


【解决方案1】:

我假设服务器返回 400,因为它需要一个 POST 请求,jsonp 只能发送 GET 请求。您可能想使用CORS,而不是使用 jsonp。

【讨论】:

  • 我(故意)返回状态码 400,我在处理错误时遇到问题,而不是避免状态码 400。感谢您的回答。
  • 伙计,正如你所说,我终于放弃了 jsonp 来使用 CORS。再次感谢您的回答。
【解决方案2】:

你的代码没有问题,就是 json 和 jsonp 响应的处理方式。检查this answer 了解如何处理错误响应。您可以使用this plugin 处理 jsonp 请求-响应

【讨论】:

  • 这应该是评论,而不是答案。
  • 谢谢,我使用了你建议的插件,效果很好。我想在产生错误时捕获状态代码,只是为了过滤 400(这意味着登录失败)或其他状态代码。 ¿你知道吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多