Response.php第403行中的UnexpectedValueException - Laravel 5.1

时间:2015-10-01 05:16:28

标签: php ajax laravel-5.1

我是Laravel的新手,正在建立一个小项目作为我的学校。我已经解决了上述错误,我似乎无法修复它。任何帮助表示赞赏。

在我的控制器中,我在第一次加载页面时进行以下调用。 getDetails方法在页面加载时非常有效,但在用Ajax调用它时失败并出现上述错误,因为用户在加载后与页面交互。

在页面加载时,方法被调用并传递给它,从而得到早期其他方法调用($CSpec[0]->id$CSize[0]->size_mm的结果值,我可以将其视为值1和{{1} })如下:

0.5

同样在控制器中,我有以下函数,该函数通过Ajax调用中使用的路径触发:

    $CD = CS::getDetails($CSpec[0]->id, $CSize[0]->size_mm);

public function itemDetails($ct, $cs) { return CS::getDetails($ct, $s); } 方法如下所示:

getDetails

我有这条路线:

public static function getDetails($ct, $cs)
{
    return DB::table('recommend_view')
        ->where('recommend_view.id', '=', $ct)
        ->where('recommend_view.size_mm', '=', $cs)
        ->first();
}

当我使用Ajax调用相同的方法时,它会因上述错误而失败。 Ajax代码在Route::get('vd/cd/{cd}/{cs}', ['uses' => 'Application\VDController@itemDetails', 'as' => 'application.vdcdetails']); 调用中生成以下URL:

$.getJSON

如果http://my.app/vd/cd/1/0.5dd()内为每个变量,我可以看到从url / controller传递给方法的正确值。

如果我在MySQL Workbench中执行查询,它按预期工作:

getDetails

因此,当在初始页面加载时调用该方法时,该方法可以直接从其他方法调用直接提供给它,但是当通过URL / Ajax传递变量时,它失败了,我似乎无法理解其中的区别。 / p>

select * 
from `recommender_view` 
where `recommender_view`.`ct_id` = 1 
and `recommender_view`.`cs_size_mm` = 0.50 
limit 1;

2 个答案:

答案 0 :(得分:1)

我相信我知道你的问题是什么,但是,请随时纠正我。

你正在使用的是Laravel查询构建器,它在PHP中返回一个stdClass对象类型,假设它找到了查询的结果集。这实际上是一个愚蠢的"没有方法的对象" echo"或返回。你不能转换为数组,也不能转换为json等。

因此,当Laravel响应对象试图处理它时,它不能使用__toString()方法来解构相应的响应。

您最好做的是针对扩展Illuminate Eloquent Model类的Model调用查询。

在这种情况下,它可能是这样的

CableRecommenderView::where('recommend_view.id', $ct)
    ->where('recommend_view.size_mm', $cs)
    ->first();

Eloquent在传递给响应对象时能够做出相应的响应。

作为一个FYI,当使用equals(' =')作为查询Eloquent中的比较运算符时(可能还有查询构建器,尽管你必须检查它),你可以放弃在 - > where()子句中明确定义它,并简单地将比较变量作为第二个参数传递。

希望有所帮助!

答案 1 :(得分:0)

ajax调用希望将响应传递给它。它无法识别您尝试传递给它的对象。

查看创建回复http://laravel.com/docs/5.1/responses

如果你返回一个json响应,例如

public function itemDetails($ct, $cs)
{
    $item = CS::getDetails($ct, $s);
    return response()->json(['data' => $item]);
}

ajax调用应该有效。然后,您可以从ajax中的数据变量中检索。