2

私が働きたいコード:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        dataType: "json", 
        processData: false,
        success: function(html) {
      $("#srchFrm").append(html);}
    });

動作するコード:

    $.ajax({
        type: "POST",
        url: "_Source/ajap/ajap.nlSrch.php",
        data: { sndJson : jsonData },
        success: function(html) {
      $("#srchFrm").append(html);}
    });

残念ながら、最初のものを送信すると、投稿データはこの「Array ()」のようになり、後で使用すると、この「Array ( [sndJson] => [\"8\",\"3\",\"」を取得します6\",\"7\"] )".

簡単な説明が必要なのはわかっていますが、理解できませんでした。

助けてください!

4

4 に答える 4

2

クエリ文字列でデータを送信してみてください...

$.ajax({
        type:"POST",
        url:"_Source/ajap/ajap.nlSrch.php?json="+jsonData,
        dataType:"json", 
        success: function(data) {
              $("#srchFrm").append(data);}
        error: function(xhr, ajaxOptions, thrownError)
        {alert("Error!");}
    });
于 2012-06-15T05:19:40.900 に答える
1

高度な処理を行う必要がないため、低レベルのajaxクラスを使用する代わりに短縮形の$.postを使用できます。だから、これは十分に素晴らしいでしょう。

$(document.ready(function(){    
  $("#submit_button").click(function(){     
    $.post('php_script.php', {
     // here's what you want to send  
     // important -- double quotes, 'cause It's evals as valid JSON
     "var1" : "val1"  
     "var2" : "val2"    
    }, function (respond){
       try {
           var respond = JSON.parse(respond);
        } catch(e){
           //error - respond wasn't JSON
        }
    });  
  });
});

PHPコード:

<?php
/**
 * Here you can handle variable or array you got from JavaScript
 * and send back if need.
 */ 
 print_r($_POST); // var1 = val1, var2 = val2

?>

質問に戻ります。 なぜ私の.ajaxリクエストが機能しないのですか? これは、JavaScriptが致命的なエラーをスローし、それ以上のコード実行を停止するためです。

追加するだけで、エラーの発生をキャッチして特定できます

try {} catch(){}エラーが発生する可能性があると思われるステートメントをブロックする

于 2012-06-15T06:21:59.787 に答える
0

dataType:jsonを指定すると、jQueryは自動的に応答を評価し、Javascriptオブジェクト(この場合は配列)を返します。結果を取得してhtmlとして#srchFormに追加しているため、JavaScriptオブジェクトに変換しても意味がありません。dataType:htmlを使用するか、まったく使用しないでください。

http://api.jquery.com/jQuery.ajax/

于 2012-06-15T05:13:34.890 に答える
0

上記の次の例は再利用できません。私は再利用可能なコードの大ファンです。ここに私の解決策があります。

ソフトウェア設計 101:
DRY 自分のことを繰り返すな。コードをオブジェクトにラップする必要があります。これでどこからでも呼び出すことができます。

var Request = {
    version: 1.0, //not needed but i like versioning things
    xproxy: function(type, url, data, callback, timeout, headers, contentType) 
    {
        if (!timeout || timeout <= 0) { timeout = 15000; }
        $.ajax(
        {
            url: url,
            type: type,
            data: data,
            timeout: timeout,
            contentType: contentType,
            success:function(data) 
            {
                if (callback != undefined) { callback(data); }
            },
            error:function(data) 
            {
                if (callback != undefined) { callback(data); }
            }, 
            beforeSend: function(xhr)
            {
                //headers is a list with two items
                if(headers)
                {
                    xhr.setRequestHeader('secret-key', headers[0]);
                    xhr.setRequestHeader('api-key', headers[1]);
                }
            }
        });
    }
};

使用法:

<script type="text/javascript">
var contentType = "applicaiton/json";
var url = "http://api.lastfm.com/get/data/";
var timeout = 1000*5; //five seconds
var requestType = "POST"; //GET, POST, DELETE, PUT

var header = [];
header.push("unique-guid");
header.push("23903820983");

var data = "{\"username\":\"james\"}"; //you should really deserialize this w/ a function
function callback(data)
{
   //do logic here
}
Request.xproxy(requestType, url, data, callback, timeout, header, contentType);
</script>
于 2013-05-16T15:25:27.977 に答える