Laravel 5.1 ajax url 参数为 url
Laravel 5.1 ajax url parameter is url
我是第一次使用 Laravel 5.1,我不明白为什么我在将 URL 传递给服务器 PHP 的 ajax 调用中收到 404 ] 脚本作为参数。
我正在执行一个 Ajax 调用,该调用由如下路由处理:
Route::get('ajax/{act}', ['uses' => 'AjaxController@helpers', 'as' => 'ajax.helpers']);
我希望变量 {act}
保存我传递的键/值对的字符串。我在服务器端的 PHP 中解码这些。 Ajax PHP 脚本包含各种助手,我不想为每个助手创建一个 Laravel 路由。
在我的应用程序中,用户将在表单字段中输入 url,我将其捕获到名为 website
的变量中
我的 ajax 呼叫需要接受:
var url = '/ajax/act=url&u=' + website;
我这样做是为了构建 url 然后传递给 jQuery $.getJSON
调用:
var url = '/ajax/act=url&&u=' + encodeURIComponent(website);
我希望 encodeURIcompponent()
函数能够完成这项工作,但是当任何参数在 [=26] 之前包含 /
个字符时,它 returns 404
=].我的基础 url 在没有额外的 url 作为参数的情况下工作得很好。
但是将 url 作为变量值传递时,它会抛出 404。
这就是 ajax 调用中的 url 的样子 returns 404:
http://my.app/ajax/act=url&u=http%3A%2F%2Fgoogle.com
此 url 完美运行(我已从 http://google.com
:
中删除 //
http://my.app/ajax/act=url&u=http%3Agoogle.com
当变量 url 中有额外的路径项时它也会失败,因为它包含额外的 /
个字符,如下所示:
http://google.com/subfolder
如何在 ajax 调用中将完整的 url 作为参数传递?谢谢!
您正在使用 relative 路径和您的 url 变量(因为您在 URL 中有前导 /
),即可能导致 404
未找到错误。
尝试使用 Laravel 的辅助方法 url()
将 base url
存储在视图的隐藏字段中(您可以在 master 如果需要,请查看)。
<input id='baseUrl' type='hidden' value='{{ url() }}' />
您可以像这样创建一个 JS 辅助函数一样简单地获取值:
var baseUrl = function(){
return $('#baseUrl').val();
};
然后将 url 附加到变量 url
的开头,如下所示:
var url = baseUrl() + '/ajax/act=url&&u=' + encodeURIComponent(website);
我认为您混淆了路由参数和查询参数。您的路线定义为 ajax/{action}
。在这种情况下,{action}
是一个路由参数,但您正试图将查询参数塞入其中。
例如,如果您访问 url http://my.app/ajax/act=url&u=google.com
,这将起作用,因为您已经到达路线 ajax/{action}
,其中 {action}
是 act=url&u=google.com
.这是将传递给您的 AjaxController@helpers
函数的值。但是,由于此数据作为路由参数传入,因此不在请求输入中。 $request->all()
将为空。
但是,如果您访问 url http://my.app/ajax/act=url&u=http://google.com
,这将不起作用,因为您没有定义此路由。这不会映射到 ajax/{action}
路线;此路由将映射到您未定义的 ajax/{action}//google.com
(因此为 404)。
我认为您真正要寻找的是:http://my.app/ajax/url?u=http%3A%2F%2Fgoogle.com
。这将使用 url
作为 {action}
路由参数命中您的 ajax/{action}
路由,并且 url 值将在查询参数中。在您的 AjaxController@helpers
函数中,您可以通过 $request->input('u');
.
访问 url
编辑
如果您确实需要将此数据作为路由参数传入,则您必须确保路由参数使用所有内容,包括斜杠:
Route::get('ajax/{action}', ['uses' => 'AjaxController@helpers', 'as' => 'ajax.helpers'])
->where('action', '.*');
但是,如果您这样做,这条路线将捕获属于 http://my.app/ajax/...
.
的所有内容
我是第一次使用 Laravel 5.1,我不明白为什么我在将 URL 传递给服务器 PHP 的 ajax 调用中收到 404 ] 脚本作为参数。
我正在执行一个 Ajax 调用,该调用由如下路由处理:
Route::get('ajax/{act}', ['uses' => 'AjaxController@helpers', 'as' => 'ajax.helpers']);
我希望变量 {act}
保存我传递的键/值对的字符串。我在服务器端的 PHP 中解码这些。 Ajax PHP 脚本包含各种助手,我不想为每个助手创建一个 Laravel 路由。
在我的应用程序中,用户将在表单字段中输入 url,我将其捕获到名为 website
我的 ajax 呼叫需要接受:
var url = '/ajax/act=url&u=' + website;
我这样做是为了构建 url 然后传递给 jQuery $.getJSON
调用:
var url = '/ajax/act=url&&u=' + encodeURIComponent(website);
我希望 encodeURIcompponent()
函数能够完成这项工作,但是当任何参数在 [=26] 之前包含 /
个字符时,它 returns 404
=].我的基础 url 在没有额外的 url 作为参数的情况下工作得很好。
但是将 url 作为变量值传递时,它会抛出 404。
这就是 ajax 调用中的 url 的样子 returns 404:
http://my.app/ajax/act=url&u=http%3A%2F%2Fgoogle.com
此 url 完美运行(我已从 http://google.com
:
//
http://my.app/ajax/act=url&u=http%3Agoogle.com
当变量 url 中有额外的路径项时它也会失败,因为它包含额外的 /
个字符,如下所示:
http://google.com/subfolder
如何在 ajax 调用中将完整的 url 作为参数传递?谢谢!
您正在使用 relative 路径和您的 url 变量(因为您在 URL 中有前导 /
),即可能导致 404
未找到错误。
尝试使用 Laravel 的辅助方法 url()
将 base url
存储在视图的隐藏字段中(您可以在 master 如果需要,请查看)。
<input id='baseUrl' type='hidden' value='{{ url() }}' />
您可以像这样创建一个 JS 辅助函数一样简单地获取值:
var baseUrl = function(){
return $('#baseUrl').val();
};
然后将 url 附加到变量 url
的开头,如下所示:
var url = baseUrl() + '/ajax/act=url&&u=' + encodeURIComponent(website);
我认为您混淆了路由参数和查询参数。您的路线定义为 ajax/{action}
。在这种情况下,{action}
是一个路由参数,但您正试图将查询参数塞入其中。
例如,如果您访问 url http://my.app/ajax/act=url&u=google.com
,这将起作用,因为您已经到达路线 ajax/{action}
,其中 {action}
是 act=url&u=google.com
.这是将传递给您的 AjaxController@helpers
函数的值。但是,由于此数据作为路由参数传入,因此不在请求输入中。 $request->all()
将为空。
但是,如果您访问 url http://my.app/ajax/act=url&u=http://google.com
,这将不起作用,因为您没有定义此路由。这不会映射到 ajax/{action}
路线;此路由将映射到您未定义的 ajax/{action}//google.com
(因此为 404)。
我认为您真正要寻找的是:http://my.app/ajax/url?u=http%3A%2F%2Fgoogle.com
。这将使用 url
作为 {action}
路由参数命中您的 ajax/{action}
路由,并且 url 值将在查询参数中。在您的 AjaxController@helpers
函数中,您可以通过 $request->input('u');
.
编辑
如果您确实需要将此数据作为路由参数传入,则您必须确保路由参数使用所有内容,包括斜杠:
Route::get('ajax/{action}', ['uses' => 'AjaxController@helpers', 'as' => 'ajax.helpers'])
->where('action', '.*');
但是,如果您这样做,这条路线将捕获属于 http://my.app/ajax/...
.