无法从响应

时间:2016-08-28 00:28:40

标签: javascript php jquery ajax callback

我有一个针对MVC的ajax调用,它调用一个函数,在完成之前调用其他5个函数。每个函数都有一个if / else,如果失败则返回自己的错误消息,并显示错误消息,原始页面需要重新加载。但如果没有错误,则ajax调用应更新到完整页面。我知道成功函数中的一个简单的if / else语句将实现这一点,并且我在每个函数的失败中放入了相同的简单错误变量。但我无法将变量拉出成功函数响应,以便在成功函数if / else语句中使用。我的ajax调用在下面,我在服务器端运行php。

function sendstuff(data) {


                            $.ajax({
                                type:"POST",
                                datatype:'json',
                                cache: false,
                                data: data,
                                url:"/Orders/getitem/",
                                success:function(resp, status, jxr){
                                    alert(resp);
                                    if(resp.fail == "error") {
                                    // error handling, show data.message or what you want.
                                    location.reload(true);
                                } else {
                                    // same as above but with success
                                    $('body').html(resp);



                                }
                            });
                            return false;
                        };

以下是从

发送错误的位置
if ( $status != 201 ) { 
            // $this->Flash->error(__('There was an error with the entry. Please, try again.'));
            $ajaxerr['fail'] = 'error';
            echo json_encode($ajaxerr); 
            die("Error: call to URL $url failed with status $status, response $result, curl_error " . curl_error($ch) . ", curl_errno " . curl_errno($ch));

这是响应中的最新内容,因为它每次都会加载成功函数的一部分。

{"fail":"error"}Error: call to URL https://api.blank failed with status 400, response {"name":"VALIDATION_ERROR","details":[{"field":"blank.fng_ints[0].ct_issue","issue":"date cannot be in the past."}],"message":"Invalid request. See details.","information_link":"https://developer.api/#VALIDATION_ERROR","debug_id":"24f4"}, curl_error , curl_errno 0

我可以看到它传递var但是我无法将其拉出来用于成功函数if / else语句。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:1)

您的服务器响应不是有效的JSON响应,因此无法正确解析,因此 - 无法获得成功消息

将您的服务器更改为

if ( $status != 201 ) { 
            // $this->Flash->error(__('There was an error with the entry. Please, try again.'));
            $ajaxerr['fail'] = 'error';
            $ajaxerr['msg'] = "Error: call to URL $url failed with status $status, response $result, curl_error " . curl_error($ch) . ", curl_errno " . curl_errno($ch);
            echo json_encode($ajaxerr); 
            exit;
}

然后它会解析为

{
    "fail":"error",
    "msg":"..."
}

无论如何,如果您遇到服务器错误,最好从服务器发送一条真实的错误消息(使用HTTP状态> = 400),然后在error回调中的jQuery中捕获它,而不是{ {1}}回调

success

答案 1 :(得分:0)

$.ajax( { ... success: function() { //handle success request }, error: function() { //handle failed requests } }) 调用将字符串输出放在json结构之外的响应中,这会导致Ajax函数无法解析响应。

考虑这样做:

die();

答案 2 :(得分:0)

在您的代码中,您的响应不是json对象,因为&#39; die&#39;呼叫产生输出。所以在没有任何参数的情况下调用 Type safety: A generic array of Class<? extends MyInterface> is created for a varargs parameter

答案 3 :(得分:0)

我解决了这个问题。所有我必须要做的就是把它变成一个var而且我删除了所有的烦恼,我觉得我和生活中浪费了几个小时的白痴,但它是固定的。谢谢大家:)特别是Yaron U.