2

私の解決策は、onClick イベントを使用して PHP ページを呼び出し、パラメーターを投稿し、AJAX を使用して結果を返すことです。指定した URL を使用して PHP ページを呼び出すときに、パラメーターを挿入します。これが私のJavascriptです:

function uploadContact() {
        var name, email, phone, badgeid;
        if(window.localStorage.length > 0)
        {
            name = window.localStorage.getItem('name');
            email = window.localStorage.getItem('email');
            phone = window.localStorage.getItem('phone');
        }
        else
        {
            name = $('input[name=fullname]').val();
            email = $('input[name=email]').val();
            phone = $('input[name=phone]').val();
        }
        $.ajax({
             url: 'UpdateContactList.php?name=' + name + '&email=' + email + '&phone=' + phone,
             type: $form.attr('method'),
             dataType: 'json',
             success: function(responseJson) {
             $form.before("<p>"+responseJson.message+"</p>");
        },
        error: function() {
            $form.before("<p>There was an error processing your request.</p>");
        }});
    }

パラメータを取得するための私のPHPコード:

<?php

$response = array();

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
  // if form has been posted process data

  // you dont need the addContact function you jsut need to put it in a new array
  // and it doesnt make sense in this context so jsut do it here
  // then used json_decode and json_decode to read/save your json in
  // saveContact()
   $data = array( 'fullname' => $_POST['name'], 'email' => $_POST['email'], 'phone' => $_POST['phone']);
      //These line is for testing only, remove it when done testing
   $test = $_POST['name'] . ' ' . $_POST['email'];
   echo "<script>alert('$test');</script>";
  // always return true if you save the contact data ok or false if it fails
   $response['status'] = updateContact($data) ? 'success' : 'error';
   $response['message'] = $response['status']
          ? 'Your submission has been saved!'
          : 'There was a problem saving your submission.';

   header("Content-type: application/json");
   echo json_encode($response);
   exit;
}
...
 function updateCacheFile($filename)
{
    $filename = "contact";
    $filename =  $filename . ".appcache";
    $cachefile = fopen ($filename, "a+");
    ....
    file_put_contents($filename, $cache_content);
}

2 つの問題に注意してください。

  1. ブラウズ アドレス リンクからのパラメータを使用して直接 PHP ページを呼び出すことができますが、何も返されません。普通ですか?

  2. JavaScript から呼び出します。テスト ライン (アラート メッセージ ボックスを呼び出す) は機能せず、メッセージは表示されません。しかし、キャッシュ ファイルはまだ更新されています。つまり、PHP ページが呼び出され、ファイルの書き込みなどを行います。

この PHP ページに書き込むファイルは 2 つあります。どちらも正しく記述されていますが、パラメーターは表示されず、メッセージ ボックスも表示されません。

ここで何がうまくいかなかったのか教えてください。

P/S: 細部、スペースを含むパラメーターは正しく渡すことができますか? ユーザーが「Bill Jobs」などのフルネームを入力することを期待していたからです。

Stackoverflow コミュニティに感謝します。

4

3 に答える 3

2
   echo "<script>alert('$test');</script>";
  // always return true if you save the contact data ok or false if it fails
   $response['status'] = updateContact($data) ? 'success' : 'error';
   $response['message'] = $response['status']
          ? 'Your submission has been saved!'
          : 'There was a problem saving your submission.';

   header("Content-type: application/json");
   echo json_encode($response);

すべての s は、出力を開始またはフラッシュするheader前に実行する必要があります。echo

   header("Content-type: application/json");
   echo "<script>alert('$test');</script>";
  // always return true if you save the contact data ok or false if it fails
   $response['status'] = updateContact($data) ? 'success' : 'error';
   $response['message'] = $response['status']
          ? 'Your submission has been saved!'
          : 'There was a problem saving your submission.';

   echo json_encode($response);
于 2012-04-16T04:17:34.120 に答える
2
$.ajax({
         url: 'UpdateContactList.php',
         data:{'name':name,'email': email,'phone':phone,'badgeid ':badgeid },
         type: $form.attr('method'),
         dataType: 'json',
         success: function(responseJson) {
         $form.before("<p>"+responseJson.message+"</p>");
    },
    error: function() {
        $form.before("<p>There was an error processing your request.</p>");
    }});
于 2012-04-16T04:18:15.533 に答える
1

ajax の data パラメータで情報を送信し、タイプを post に設定してみてください。このような...

$.ajax({
         url: 'UpdateContactList.php',
         type: 'post',
         dataType: 'json',
         data: {'key1': value1, 'key2':value2},
         success: function(responseJson) {
         $form.before("<p>"+responseJson.message+"</p>");
    },
于 2012-04-16T04:29:11.560 に答える