【问题标题】:Simple Ajax Request to Laravel Not Working对 Laravel 的简单 Ajax 请求不起作用
【发布时间】:2014-11-13 00:08:28
【问题描述】:

尝试使用带有 laravel 后端的 ajax 简单地返回和显示用户信息。使用最新的 JQuery 和 Laravel 和 MySQL。这是简单的路线:

Route::get('users', function()
{
    $users = User::all();
    return $users;
});

在浏览器中通过 url 调用时效果很好。

这是简单的 ajax 请求:

$().ready(function() {
  $.ajax({
    url: "http://xx.xxx.xxx.xxx/users",
    type: "GET",
    cache: false,
    dataType: "jsonp",
    jsonpCallback: "JsonpCallback"
  })
  .done(function( data ) 
  {
    JsonpCallback( data );
  })
  .fail(function( jqXHR, textStatus, errorThrown ) 
  {
    alert( "Request failed: " + textStatus + "   /   " + errorThrown );
  });
  function JsonpCallback( json )
  {
    $( '#mainContent' ).html( json.result );
  }
  return false;
});

用户记录正在返回到 dom 中,我可以通过开发工具网络响应看到它们,但是 .fail 每次都会触发,并且永远不会调用回调。失败是:

Request failed: parsererror / Error: JasonpCallback was never called.

我已经尝试了几天我能找到的所有解决方案,并且真的可以使用帮助。它必须是我缺少的一些简单的东西。

【问题讨论】:

  • 你试过没有http的url吗?只需致电/用户。 parseerror 表示,可能是数据类型错误
  • 也许这很愚蠢,但是您是否尝试将 function JsonpCallback 移到其他所有功能之外?
  • pc-shooter - 最终,html/javascript 将成为设备上的应用程序,并且需要服务器的完整路径。我刚才确实尝试过,但是 .fail 仍然会以空白信息触发。 Dheed - 当我读到它时,它几乎在其他功能之外,但我甚至将它移到就绪之外,结果相同。并不是回调不起作用,而是 .done 没有触发并且 .fail 是所以回调永远不会被调用。

标签: php jquery mysql ajax laravel-4


【解决方案1】:

jQuery 期待 jsonp 响应,但 return $users 正在返回普通的 json。将dataType 切换为json,或者改为:

return Response::json($users)->setCallback(Input::get('callback'));

...从你的路线。

请参阅 creating a JSONP response 下的 Laravel 文档。

【讨论】:

  • 谢谢达米亚尼。您的解决方案确实允许触发回调。我走了一条不同的路线,但知道我会在某个时候需要它。我曾尝试过 json 数据类型,但浏览器对 cors 嗤之以鼻。主要关注点是使用 Cordova 的跨平台 Native App。事实证明 Cordova 允许 cors。因此,在 laravel 中的 index.php 中添加了 cors 访问,以便在浏览器中进行测试,并且可以使用 laravel 视图,无需解码 jsonp 并在设备上重新格式化,如果这有意义的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 2015-01-01
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多