2

process.php が form.html によって作成された Ajax リクエストに応答すると、"false" または "true [ハッシュ値]" で応答します (ハッシュ値はハッシュ関数の出力です)。form.html で、考えられる 2 つの応答に対して別の関数を呼び出したいのですが、応答を解析するにはどうすればよいですか? たとえば
var responses = xmlhttp.responseText.split(" ")
、ハッシュ関数が「false」を出力しないと仮定して呼び出す必要があります。使用できる
if(xmlhttp.responseText != "false")
これらの方法はどちらもハックで非効率的ですが、より良い方法はありますか?

4

2 に答える 2

4

PHP コードで次のことができます。

$returnValue['ValueA'] = "a value";
$returnValue['ValueB'] = "another value";

echo json_encode($returnValue);

JavaScript コードで (ここでは JQuery を使用します):

$.ajax({
    type: "GET",
    dataType: "json",
    url: "./myphpfile.php",
    data: "parameter=parametervalue",
    success: function(data){
        printresult(data);
    }
});

function printresult(data)
{
    alert(data['ValueA']);   
    alert(data['ValueB']);
}

これはあなたを助けていますか?

于 2013-04-01T18:29:14.420 に答える
0

同様の状況がありました。これが基本的な Javascript を使用した私のソリューションです。

まず、PHP 側では、4 つの結果 (INSert または UPDate での PASS または FAIL) のいずれかを取得できるため、AJAX への応答にはこれらの結果が前もって含まれます。

[...]  
$echoStr = 'PASS/INS/Adding ID Succeeded.';   // INSert successful  
[...]  
$echoStr = 'FAIL/INS/Adding ID Failed';       // INSert failed  
[...]  
$echoStr = 'PASS/UPD/Updating D Succeeded.';  // UPDate successful  
[...]  
$echoStr = 'FAIL/UPD/Updating ID Failed';     // UPDate failed  
[...]  
echo $echoStr; return;                        // Reply to AJAX request.

Javascript 側 (ajax1 は私の AJAX obj です) では、応答文字列を 3 つのコンポーネントに分割し、それに応じて処理します。

[...]  
ajax1.onreadystatechange = function() { 

  if (ajax1.readyState == 4 && ajax1.status == 200) {  

    response = ajax1.responseText;     // PASS or FAIL, INS or UPD, free form text alert

    passFail = response.substr(0,4);   // PASS or FAIL

    insUPD   = response.substr(5,3);   // INS or UPD

    usrMsg   = response.substr(9);     // Free form alert text

    if (passFail == 'PASS' && insUPD == 'INS') {

       // do what you need to do here
    }

    alert(usrMsg);
  }                 //  if (ajax1.readyState == 4 && ajax1.status == 200) {  
}                   //  ajax1.onreadystatechange = function() {  
[...]  
于 2014-11-22T13:49:46.483 に答える