0

これは私をバタバタさせています...

私は CodeIgniter フレームワークを使用しており、その中で AJAX 関数の素敵な php 側が完全に機能しています (& が呼び出されています):

function save_new_schedule_set() {
    //do stuff...
    echo json_encode($arrResult);
}

ステップスルー デバッグを使用すると、IS が正しい結果を生成していることがわかります。つまり、次のようになります。

{"id":128} 

ただし、どういうわけか、この幸せな結果が呼び出し元 (jquery) 関数によって返された場合:

function SaveSchedule() {

    $.ajaxSetup({
        dataType: 'json',
        type: "POST",
        success: function(data){ alert('Working'); },
        error: function(o,c,m) { 
            alert(m + " : " + o + " : " + c); 
        }
    });
    var $url = getPHPinit_AddEvent("base_url") + getLink_AddEvent("save_schedule");
    $.post($url, {
        "description"   : $description,
        "start_time"    : $startTime,
        "end_time"      : $endTime
    }, "json"); 
}

success() ではなく常に error() をトリガーします。具体的には:

SyntaxError: JSON.parse: unexpected character : [object Object] : parsererror

firebug を使用して検査すると、error().o.responseText には期待される結果が含まれています...

{"id":128} 

...しかし、CodeIgnitor によってそこに置かれたように見える、大量の ActiveRecord ジャンクが先頭に追加されています。

<div style="border: 1px solid rgb(153, 0, 0); padding-left: 20px; margin: 0px 0px 10px;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: array_keys() expects parameter 1 to be array, object given</p>
<p>Filename: database/DB_active_rec.php</p>
<p>Line Number: 1109</p>
</div>
<div style="border: 1px solid rgb(153, 0, 0); padding-left: 20px; margin: 0px 0px     10px;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: sort() expects parameter 1 to be array, null given</p>
<p>Filename: database/DB_active_rec.php</p>
<p>Line Number: 1110</p>
...
</div>{"id":128}

そして明らかに、余分なジャンクはすべてパーサーを爆破します。

以前にこの問題に遭遇した人はいますか? どうすればそこから抜け出せるのでしょうか?

ありがとうございました!!!

PS: 呼び出しページには正常に動作している他の A​​JAX 呼び出しがあるため、これは特に不可解です。

4

1 に答える 1

1

どっ!問題は、php 側のモデル クラスのコードから発行された致命的ではない警告によって引き起こされています。Codeignitor は、これらの警告を画面に処理しようとしています。これは、警告を AJAX 出力の前に追加することで、json パーサー用に警告します。

于 2012-07-10T22:14:23.607 に答える