Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查我的响应是字符串还是JSON对象?_Javascript_Jquery_Json - Fatal编程技术网

Javascript 如何检查我的响应是字符串还是JSON对象?

Javascript 如何检查我的响应是字符串还是JSON对象?,javascript,jquery,json,Javascript,Jquery,Json,我希望我的响应是JSON对象。但在某些函数中,它是字符串,我想解析它。我怎样才能做到这一点?这是我的职责 function serverRequest(requestDATA, successCallback, errorCallback, hideIndicator, showAlert){ var METHOD = "POST"; var serverURL = 'http://istudy.com.pk/api/server.php'; //Path to Server.p

我希望我的响应是JSON对象。但在某些函数中,它是字符串,我想解析它。我怎样才能做到这一点?这是我的职责

function serverRequest(requestDATA, successCallback, errorCallback, hideIndicator, showAlert){
    var METHOD = "POST";
    var serverURL = 'http://istudy.com.pk/api/server.php'; //Path to Server.php
    //var serverURL = 'http://localhost/istudy/server.php'; //Path to Server.php
    var DATA_TYPE = 'json';
    var TIMEOUT = 20000;
    console.log(requestDATA);
    $$.ajax({
        url: serverURL,
        data: requestDATA,
        dataType: DATA_TYPE,
        type: METHOD,
        timeout: TIMEOUT,
        success: function(data){
            successCallback(data, hideIndicator, showAlert);
        },
        error: function(a, b, c){
            errorCallback(a, b, c, hideIndicator, showAlert);
        }
    }); 
}
这是我的回答

responseText: "{"status":"success","message":"Your Order has Processed. Please Note this pin <b style=\"background-color:green;\">osIyKvAp<\/b> and send it to the admin with payment details."}"
responseText:“{”status:“success”,“message:“您的订单已处理。请注意此pin osIyKvAp,并将其发送给管理员,并提供付款详细信息。”}”
这是我的PHP函数

function confirm_order($id, $newarray, $cn) {
    $today = date('y-m-d');
    $expiry = date('Y-m-d', strtotime("+30 days"));
    $total_items = 0;
    $total_price = 0;
    foreach ($newarray as $key => $val) {
        $total_items++;
        foreach ($val as $doc) {
            $total_price = $total_price + $doc->doc_price;
        }
    }

    $pin = random_string('alnum', 8);

    $sql = "INSERT INTO orders (order_id, order_UserId, order_total_items, order_amount, date_created,order_status,order_pin)
    VALUES ('', '" . $id . "', '" . $total_items . "', '" . $total_price . "', '" . $today . "','0','" . $pin . "')";

    if (mysqli_query($cn, $sql)) {
        $order_id = mysqli_insert_id($cn);

        foreach ($newarray as $key => $val) {
            $total_docs = 0;
            $total_items++;
            $sep = '|';
            $sub_price = 0;
            $doc_list = '';
            foreach ($val as $doc) {
                $doc_list .= $doc->doc_id . $sep;
                $sub_price = $sub_price + $doc->doc_price;
                $total_docs++;
                $sep = '|';
            }

            $sql = "INSERT INTO cart_items (uc_id, uc_user_id, uc_course_id, uc_course_docs_id, uc_course_docs_num,uc_price,uc_order_num,uc_order_status,uc_dateBuy,uc_dateExpire)
            VALUES ('', '" . $id . "', '" . $key . "', '" . $doc_list . "', '" . $total_docs . "','" . $sub_price . "','" . $order_id . "','0','" . $today . "','" . $expiry . "')";

            mysqli_query($cn, $sql);
        }

        $response_array['status'] = 'success';
        $response_array['message'] = 'Your Order has Processed. Please Note this pin <b style="background-color:green;">' . $pin . '</b> and send it to the admin with payment details.';
    } else {
        $response_array['status'] = 'error';
        $response_array['message'] = 'An error occurred. Please try again later.';
    }
    echo json_encode($response_array);
}
函数确认\u顺序($id,$newarray,$cn){
$today=日期('y-m-d');
$expiry=日期('Y-m-d',标准时间(+30天));
$total_items=0;
$total_price=0;
foreach($newarray作为$key=>$val){
$total_items++;
foreach($val作为$doc){
$total_price=$total_price+$doc->doc_price;
}
}
$pin=随机字符串('alnum',8);
$sql=“插入订单(订单id、订单用户id、订单总额、订单金额、创建日期、订单状态、订单pin)
值(“,“$id.”、“$total_items.”、“$total_price.”、“$today.”、“$0.”、“$pin.”);
if(mysqli_查询($cn,$sql)){
$order\u id=mysqli\u insert\u id($cn);
foreach($newarray作为$key=>$val){
$total_docs=0;
$total_items++;
$sep=“|”;
$sub_价格=0;
$doc_list='';
foreach($val作为$doc){
$doc\u list.=$doc->doc\u id.$sep;
$sub_price=$sub_price+$doc->doc_price;
$total_docs++;
$sep=“|”;
}
$sql=“插入购物车项目(uc_id、uc_用户id、uc_课程id、uc_课程文档id、uc_课程文档编号、uc_价格、uc_订单编号、uc_订单状态、uc_dateBuy、uc_dateExpire)
值(“,“$id.”、“$key.”、“$doc_list.”、“$total_docs.”、“$sub_price.”、“$order_id.”、“$0.”、“$today.”、“$expiration.”);
mysqli_查询($cn,$sql);
}
$response_数组['status']='success';
$response_array['message']='您的订单已处理。请注意此pin。'$pin'。并将其发送给管理员并提供付款详细信息。';
}否则{
$response_数组['status']='error';
$response_array['message']='发生错误。请稍后再试';
}
echo json_encode($response_数组);
}

当且仅当我的响应为字符串时,我可以对JSON.parse进行任何检查吗?

您可以使用相当简单的javascript来实现这一点:

if (typeof(data) == 'string') {
    data = JSON.parse(data);
}
如果您对它为什么不能自动解析JSON感到好奇,以下是几个常见的原因:

  • 无效的JSON(请检查jsonlint.com)
  • 在需要json时未获取
    应用程序/json
    内容类型(如dataType参数中设置的)
另请参见:

“当且仅当我的响应为字符串时,我是否可以对JSON.parse进行任何检查?” 是的,你可以

if (typeof (response) != 'object'){
response = JSON.parse(response);
}

将此添加到成功处理程序中

data = typeof data === 'string' ? data : JSON.parse(data);

删除
数据类型='json';
并重试:

function serverRequest(requestDATA, successCallback, errorCallback, hideIndicator, showAlert){
    var METHOD = "POST";
    var serverURL = 'http://istudy.com.pk/api/server.php'; //Path to Server.php
    //var serverURL = 'http://localhost/istudy/server.php'; //Path to Server.php
    var TIMEOUT = 20000;
    console.log(requestDATA);
    $$.ajax({
        url: serverURL,
        data: requestDATA,
        type: METHOD,
        timeout: TIMEOUT,
        success: function(data){
            try {
               if(typeof(data)==='string') data=JSON.parse(data);
            } catch(ex) { // bad json response
               console.error(ex);
            }
            successCallback(data, hideIndicator, showAlert);
        },
        error: function(a, b, c){
            errorCallback(a, b, c, hideIndicator, showAlert);
        }
    }); 
}
注意。这不会避免问题,但会让我们解析响应,同时服务器可能会有错误响应,即
Content-Type
不是
application/json
。一些web服务器会同时接受
Content-Type:text/plain
Content-Type:application/json;
标题,而returning在这两种情况下,$.ajax解析的都是
json格式的字符串
,而不是
json对象
(当发现
应用程序/json
作为
内容类型
头值时)

要实现这一点,请确保在
php
代码中打印出正确的标题

<?php

header('Content-Type: application/json`)

我必须在我的成功中写这篇文章?我在我的消息中包含了html。这是原因吗?这也是我的另一个问题,它有完整的细节。当你设置
数据类型:“json”
时,它会自动将响应解析为json。不需要手动执行。你可以
echo json\u encode($response\u array)
但是你确定你在做
头('Content-Type:application/json')
吗?是的,在我的server.php中,CORS的正下方,我是.3rd lineI console.log(typeof(data)),它是object。但是它说的是parseerror。有什么想法吗?这可能是由于一个错误的json对象。如果你做
json.stringify(data)
你会得到什么?{“status”:“成功”,“消息”:“您的订单已处理。请注意此pin KTDZoFxf并将其发送给管理员,并提供付款详细信息。”}好的,这是一个有效的JSON对象,因此您从哪里得到此错误,即哪一行?反证为:
JSON.parse(JSON.stringify(data))
您将得到解析后的json对象。出于某种原因,我无法理解您的success函数中的内容。您将其称为
数据
而不是
响应