3

フォームから AJAX 呼び出しを行うと、成功したと表示されますが、データ オブジェクトは null です。コードは次のとおりです。

$.ajax(
  {
    url: 'shipprocess.php',
    dataType: 'json',
    type: 'POST',
    success: function(data)
      {
    alert('Data is: ' + data);
    alert('The AJAX request was a success.');
      },
    'error': function()
      {
    alert('An unexpected error occurred.');
      }
  });
return false;

フォームは次のようになります。

<div class="processedDate">
<form action="shipprocess.php" method="POST" id="shipProcess2" name="shipProcess2">
<input type="hidden" name="empID" value="1" />
<input type="hidden" name="thisOrderID" id="thisOrderID2" value="2" />
<label>Date Shipped </label>
<input type="text"  name="shipDate" id="shipDate2" class="shipDate" size="20" value="" />
<input type="submit" name="shipped" id="shipped2" class="shipped" value="Shipped!" />
</form>
</div>

AJAX 呼び出しが行われた後、Firebug はステータスを 200、コンテンツの長さを 0 と表示します。フォームを処理するスクリプトは、shipprocess.php と呼ばれます。戻り時に次のデータをエコーし​​ます。行はコメントアウトされています:

[ { "sd": "2012-09-17", "eid": "1", "oid": "2", "efn": "Johnathan", "eln": "Smith" } ]

何らかの理由で、スクリプトはデータが null であることを警告し続けます。完全な例はhttp://www.yellowcas.com/ship/shipexample.phpにあります。この例は、フォームを送信したときにデータ オブジェクトが null であることを示す警告メッセージを示しています。また、shipprocess.php スクリプトが返すデータの完全な例もhttp://www.yellowcas.com/ship/shipexample1.phpにあります。以前に AJAX を使用して、ユーザーが入力した郵便番号の都市と州の入力フィールドを設定しました。jQuery スクリプトは、郵便番号フォームに POST ではなく GET を使用することを除けば、ほとんど同じです。

PHP でヘッダーを JSON データとして宣言しようとしましたが、それも役に立ちません。Firebug も役立つ情報を提供していないようです。testjson.html という別のファイルを使用してスクリプトをテストしました。そのファイルでは、有効な JSON データをファイル内の唯一の行としてヘッダーをまったく持たずに配置し、データ変数をオブジェクトとして返します。その例は www.yellowcas.com/ship/shipexample2.php にあります。2 つ以上のハイパーリンクを投稿できませんでした。shipprocess.php のコードをご覧になりたい場合は、喜んで投稿します。この記事をあまり長くしたくないだけです。どんなアイデアでも大歓迎です。ありがとうございました。

私が行ったことを確実に確認できるように、shipprocess.php コードを投稿することにしました。次のとおりです。

<?php
require_once('dblogin.php');
require_once('dbconnect.php');
require_once('funcs.php');
$err = array();
$datePattern = "!^(\\d\\d)[-/](\\d\\d)[-/](\\d\\d(?:\\d\\d)?)$!";
$psErr = "Shipping date is required.";
$emErr = "Employee ID is missing.";
$orErr = "Order ID is missing.";
if(isset($_POST['shipped']))
  {
    $postEID = clean($_POST['empID'],$emErr,$n);
    $postOID = clean($_POST['thisOrderID'],$orErr,$n);
    $postShipDate = clean($_POST['shipDate'],$psErr,$n);
    $now = date("Y-m-d H:i:s");
    if($postEID == $emErr)
      {
    $err[] = $postEID;
      }
    else
      {
    $query = "SELECT FK_UserID,FirstName,LastName FROM employees WHERE EmployeeID = '$postEID'";
    $res = mysql_query($query);
    if(mysql_num_rows($res) < 1)
      {
        $err[] = "Employee does not exist.";
      }
    else
      {
        while($row = mysql_fetch_assoc($res))
          {
        $retUserID = $row['FK_UserID'];
        $retFirstName = $row['FirstName'];
        $retLastName = $row['LastName'];
          }
      }
      }
    if($postOID == $orErr)
      {
    $err[] = $postOID;
      }
    if($postShipDate == $psErr)
      {
    $err[] = $postShipDate;
      }
    else
      {
    if (preg_match($datePattern,$postShipDate,$sMatches))
      {
        $sMonth = $sMatches[1];
        $sDay = $sMatches[2];
        $sYear = $sMatches[3];
        if(checkdate($sMonth,$sDay,$sYear))
          {
        $shipDate = "$sYear-$sMonth-$sDay";
          }
        else
          {
        $err[] = "Invalid shipping date.";
          }
      }
    else
      {
        $err[] = "Invalid Shipping Date";
      }
      }
    if(empty($err))
    //  Keep processing the information if there are no errors.
      {
    $data[] = "$postEID,$shipDate,$postOID,$now,$retFirstName,$retLastName";
      }
    else
    //  Return the errors to the user so corrections can be made.
      {
        $data[] = implode(",",$err);
      }
    for ($i=0;$i<sizeof($data);$i++)
      {
    $info = explode(",",$data[$i]);
    $data[$i] = $info;
      }
    $result = array();
    for ($y=0;$y<sizeof($data);$y++)
      {
    if (($data[$y][0]) !== false)
      {
        array_push($result, array("sd"=>$data[$y][1], "eid"=>$data[$y][0], "oid" => $data[$y][2], "efn"=>$data[$y][4], "eln"=>$data[$y][5]));
      }
    if (count($result) > 2)
      {
        break;
      }
      }
  }
echo array_to_json($result);
?>

私が提供した 3 つのサンプル ページを試して、さまざまな結果がどのようなものかを確認してください。ありがとうございました。

4

3 に答える 3

1

あなたのコードには少なくとも2つのものが欠けています:

1:Ajaxで投稿する場合は、投稿データを送信する必要があります。したがって、送信するデータを指定する必要があります。ほとんどの場合、シリアル化されたフォームデータになりますが、何でもかまいません。

var dataString = 'name=Gr G';
$.ajax(
  {
    url: 'shipprocess.php',
    dataType: 'json',
    data: dataString,
    type: 'POST',
    ...

2:戻り値を期待していますが、戻り値を送信していません。処理後、shipprocess.php次のようにエコーする必要があります。

...    
echo 'data received and processed';
...
于 2012-09-26T07:56:12.163 に答える
0

$.ajax() メソッドを誤用しています。フォームのコンテンツで「data」パラメーターを指定する必要があります。

したがって、次のようにする必要があります。

$.ajax({
    "url": 'shipprocess.php',
    "dataType": 'json',
    "type": 'POST',
    "data": $("#myform").serialize(),
});
于 2012-09-26T08:11:13.827 に答える