簡體   English   中英

jquery.ajax json錯誤?

[英]jquery.ajax json wrong?

嘿,我在通過jquery提交數據並返回時遇到問題:

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } 
        if(data.result == 1) {
            alert("1")
        }
    }
});

因此,這些if條件之一必須為true,因為:

checkAvailability.php:

if(isset($_POST['data'])) {
    define('SECURE', true);
    include "storescripts/connect_to_mysql.php";

    require 'AvailabilityChecker.php';

$config = array(etc..);

    $availabilityChecker = new AvailabilityChecker($config);

    $data = $_POST['data'];
    $data = json_decode($data,true);

    preg_match( '/(\d+(\.\d+)?)/', $data['x'] , $m);
    $x =  $m[0];

    if($availabilityChecker->check_availability($x)) {
        echo json_encode(array("error" => "is ok", "result"=>1));
    } else {
        echo json_encode(array("error" => "not ok", "result"=>0));
    }
}

data.result必須為1或0。有人可以告訴我為什么沒有警報消息嗎? 問候!

更新:

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } else { alert("fail-1") }
        if(data.result == 1) {
            alert("1")
        } else { alert("fail-2") }
    }
});

現在,我首先收到“失敗1”警報,而不是“失敗2”警報,因此,如果兩個條件都為假,為什么?

您需要指定dataType,否則jquery會嘗試猜測您要執行的操作。 在這種情況下,它錯誤地猜測了text / html而不是application / json。

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    dataType: 'json',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } else { alert("fail-1") }
        if(data.result == 1) {
            alert("1")
        } else { alert("fail-2") }
    }
});

在回顯json之前,還應該在php中正確設置content-type標頭。

header('Content-type: application/json');

您可以選擇“要么要么要么要么要么要么不做”,但是我建議同時做這兩個。

一個解決方案可以是

success: function(d) {

        data = jQuery.parseJSON(d);

        if (data.result == 0) {
            alert("0")
        }
        if(data.result == 1) {
            alert("1")
        }
    }

因為$ .ajax不會為您解碼頁面中的結果文本。 實際上,php代碼的作用是將json字符串打印到流中。

請注意,傳遞給成功的輸出可以是任何類型的文本(也可以是純文本形式的xml代碼)

您需要在php文件中設置正確的內容類型標頭:

header('Content-Type: application/json');
//snip
echo json_encode(array("error" => "is ok", "result"=>1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM