【问题标题】:JSON/AJAX still displays errorJSON/AJAX 仍然显示错误
【发布时间】:2013-04-28 02:47:33
【问题描述】:

背景

我有一个 Web 应用程序,它显示有关帐户的“简单”信息,即姓名和帐号……我在侧面有一个按钮来显示“详细”信息……即姓名、帐户号和电话#.

系统需要在单击此按钮时动态提取信息,并将填充到指定的 div 中...在这种情况下我做错了什么,因为我 不断收到带有“错误加载信息”的警报编辑: - 将错误警报更改为警报(textStatus) - 现在我所拥有的只是警报框中的“错误”......

JS/Ajax

$('.view_information').click(function(e) { 
            //On Clicking the function, dynamically load the data for the viewing
                var dataObj = {};
                dataObj["id"] = $(this).data('id'); 
                dataObj["action"] = "get"; // "get" or "set"
                $.ajax({
                    url: 'view_agency_info.php',
                    type: 'POST',
                    data: dataObj,
                    dataType: 'json',
                    success: function(data){
                        /* Doesn't Work....*/
    $('.view_id').html(data.id);
    $('.view_name').html(data.name);
    $('.view_account').html(data.account);
    $('.view_phone').html(data.phone);
    /*Also Doesn't work...                      
    $('.view_id').html(data.message['id']);
    $('.view_name').html(data.message['name']);
    $('.view_account').html(data.message['account']);
    $('.view_phone').html(data.message['phone']);*/
                    },
                    error: function(jqXHR, textStatus, errorThrown){
                       // alert('Error Loading Information');
                       alert(textStatus);
                    }
                    });

JSON

<?php
include_once('customer.class.php');
$customer = new Customer();
$query = "SELECT * FROM table WHERE id=$id LIMIT 1"; //expecting one row  

    try {
        $result = $customer->runQuery($query); //class function with fetchAll
    } catch (Exception $e) {
        echo "Error: " . $e->getMessage();
    }       

$message = array( 
 'id' => $id,
 'name' => $result[0]['agency_name'], 
 'account' => $result[0]['account_number'], 
 'phone' => $result[0]['phone'] 
 );
 } 
  print json_encode($message); 
 ?>

【问题讨论】:

  • 当您可以拥有包含有关为什么会发生错误的信息的动态错误消息时,不要输出固定错误消息。例如alert(textStatus) 怎么样?从更大的角度来看,如果您的 JS 代码除了 json 文本之外什么都没有,那么您的服务器端脚本不应该输出任何东西但 json。如果您的查询失败,您将输出一条纯文本错误消息,该消息将不是有效的 json。您永远不会知道为什么会收到错误消息,因为您所说的只是“出了点问题”。
  • @Marcb TBH php 脚本处理了更多功能,所以我不相信它会像所说的那么简单....由于我是 JSON 和 AJAX 的新手,如果我切换alert(textStatus) 如前所述,我还需要做其他事情吗?...顺便说一句,什么不是严格意义上的 json?
  • "Error: " ... 只是一个将输出到客户端的明文字符串。它将被加载到 JSON 解析器中,导致它出错。当然,只有在发生 db 故障时才会发生这种情况,但仍然......您会将非 json 文本输出到需要 json 的上下文中。
  • @MarcB ... 通过使用 alert(textStatus) 我仍然只收到“错误”

标签: php javascript mysql ajax json


【解决方案1】:

看来我能够修复语法以使其可操作....必须将数组传递给 json 以执行。

我把 JS/AJAX 改成:

/* Old Variable Definitions
//var dataObj = {};
//dataObj["id"] = $(this).data('id'); 
//dataObject["column"] = $(this).data('column');
//dataObj["action"] = "get"; // "get" or "set"*/

/* New Syntax: */
var data_id = $(this).data('id');
var data_action = "get";
var column_toact_on = $(this).data('column');
$.ajax({
    url: 'view_agency_info.php',
    type: 'POST',
    //data: dataObj, // OLD array
    data: {id : data_id, action: data_action, column: column_toact_on},
    dataType: 'json',
    success: function(data){
        alert("Wooptee Doo Basil!");}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 2020-07-24
    • 1970-01-01
    • 2016-04-19
    • 2012-09-10
    • 1970-01-01
    • 2014-07-05
    相关资源
    最近更新 更多