首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ajax回传和Laravel

Ajax回传和Laravel
EN

Stack Overflow用户
提问于 2019-10-09 20:24:55
回答 3查看 1.2K关注 0票数 1

我已经创建了一个API,我的AJAX帖子向它发送了值。AJAX确实发布了,而我的laravel确实处理了这些值。我的问题是回调将值返回到我的AJAX帖子。在执行控制台日志时,AJAX不会返回成功部分中的结果。我希望api的结果可以使用数据来确定我的条件。目前,控制台日志甚至都不返回值。但是,在预览下的铬检查器中,它显示了API的响应,而不是在“成功”部分。

阿贾克斯

代码语言:javascript
运行
复制
var fname = "Joe";
var lname = "Test";
var processUrl = "api.example.com/z1";
$.ajax({
    type: 'POST',
    url: processUrl,
    data: {"name": fname,"surname": lname},
    dataType: 'json',
    success: function(res){
      console.log(res);
      if(res.length >= 1){
        $('#display').val(res.name);
      }
   }                            
});

PHP

代码语言:javascript
运行
复制
public function checkResults(Request $request){
  $name = $request->name." ".$request->surname;

  $result = array();
  $result['name'] = [$name];

  return response()->json($result,201);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-09 21:48:42

首先,最好使用200 OK响应代码(而不是201)返回。

注:如果您只想立即得到问题的答案,您可以看到这个答案的最后一部分(使用“完成/失败”结构而不是“成功/错误”)。

附加信息:

客户机(前端)<->API<->服务器(后端)开发人员使用的模式很多。几乎所有的API都没有任何500个服务器错误代码。但是API结构之间也存在许多不同之处。

  1. 其中之一是发送这样的响应(这是唯一的一个响应示例): 返回响应()->json( 'success‘=> true,// true或false 'message’=>‘有关成功!,200);// 200,401,403,404,409等
  2. 另一种方法是始终发送200 OK,但消息也可能涉及错误: 返回响应()->json( 'success‘=> false,// true或false 'code’=> 404,'message‘=>“!”,200);

这类方法将在try{}catch()下编写,并且只返回200,但该消息也可以模拟为错误(例如)。

  1. 另一种(适合您的方法)是更改前端AJAX功能,如下所示: $.ajax({ type:'POST',url: processUrl,data:{{-_token:"{{ csrf_token() }}",-}名称: fname,姓氏: lname },dataType:'json‘}).done(函数(Res){ console.log(res);if(res.length >= 1) { $('#display').val(res.name);}).fail(函数(jqXHR,textStatus,errorThrown) { console.log("Error:“+ textStatus);});

AJAX .done()函数替换方法.success(),后者在jQuery 1.8中被废弃。这是成功回调函数的另一种构造(与前面一样:" success : function (){.}“)。

AJAX .fail()函数替换方法.error(),后者在jQuery 1.8中被废弃。这是完整回调函数的替代结构(如前面的"error: function (){.}“)。

注意:.error()回调是对HTTP错误调用的,但如果响应上的JSON解析失败,也会调用回调。如果响应代码为200/201,但仍会引发错误回调,则可能会发生这种情况。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 21:38:14

我认为这是因为您正在发送状态代码201 (已创建),但是您需要发送状态代码200 (好的)来触发成功的回调。

代码语言:javascript
运行
复制
public function checkResults(Request $request){
  $name = $request->name." ".$request->surname;

  $result = array();
  $result['name'] = [$name];

  return response()->json($result,200);
}

我无法在jQuery文档中具体找到它,但这使问题能够解决它。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 21:54:49

由于Ajax调用的异步特性,不将它们放在程序的正常执行流程中。请参阅这个职位以获得更多的洞察力。

解决问题的一个快速方法是在函数中包含ajax调用,并随时调用该函数,以便与服务器异步交互。

代码语言:javascript
运行
复制
var fname = "Joe";
var lname = "Test";
var processUrl = "api.example.com/z1";
ajaxCall();

function ajaxCall() {
    $.ajax({
        type: 'POST',
        url: processUrl,
        data: {"name": fname,"surname": lname},
        dataType: 'json',
        success: function(res){
            console.log(res);
            if(res.length >= 1){
                $('#display').val(res.name);
            }
        },
        error: function() {     
            console.log('error');
        }           
    });
}

此外,在ajax调用设置中包含一个错误函数,以处理ajax请求失败的情况。有关此操作的替代样式,请参见这个答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58311781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档