2

電話から画像をアップロードするための次のクライアントコードがあります

$("#placeorder").click(
 function() {
  if ($('#placeorderform').valid()) {
   var formData = $('#placeorderform').serialize();
   formData += "&uploaded="+ imgData;
   $.ajax({
    type : "POST",
    url : _host+ "/addorder.php",
    data : formData,
    dataType : 'jsonp',
    success : onSuccess,
    error : onError
    });
  }
 });

サーバーサイドPHP(機能しない)

$encodedData = str_replace(' ','+',$_POST['uploaded']);

サーバーサイドPHP($_REQUESTまたは$_GETは機能しますが、小さい画像の場合)

$encodedData = str_replace(' ','+',$_REQUEST['uploaded']);

私のクライアントコードの問題は何ですか。

追加の観察:

リクエストヘッダーを調べてみたところ、驚くべき結果が見つかりました。ブラウザで上記のajaxを実行すると、データはPOSTで受信されます。ただし、Phonegap内から、タイプ「POST」を明​​示的に指定した後でも、データはGETで受信されます。

誰かがこれらの動作に光を当てることができますか:(私のPhonegap構成に何か問題がありますか?

4

3 に答える 3

3

だから私はこれを機能させました...驚くべき発見!!!

dataType:'jsonp'を('json'または'text')に変更すると、formdataは$_POSTを通過します。

dataType:'jsonp'が不明な理由でformdataを$_GETまたは$_REQUESTを通過する場合のみ

なぜこれが起こっているに違いないのかわからない。しかし今のところ、私の問題は「json」で解決されています。

于 2012-05-30T09:52:27.057 に答える
1

私の知る限り、フォームのシリアル化にはファイルは含まれません。PhoneGap を使用している場合は、ファイルをアップロードできる File API を使用してみませんか?

ファイルと一緒にフォーム変数を送信するには、オプションで params 配列を追加するだけです

var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=fileURI.substr(fileURI.lastIndexOf('/')+1);
options.mimeType="text/plain";

var params = new Object();
params.value1 = "test";
params.value2 = "param";

options.params = params;
var ft = new FileTransfer();
ft.upload(fileURI, "http://some.server.com/upload.php", win, fail, options);
于 2012-05-28T13:50:37.327 に答える
0

応答で JSONP を期待しているときに POST 要求を送信することはできません。JSONP は単なる get リクエストであり、dom に返されるスクリプトを埋め込みます。

これは、ajax呼び出しがjqueryでどのように機能するかであり、これも説明しています -「タイプ「POST」の明示的な言及の後でも、データはGETで受信されます」

于 2013-05-18T20:45:38.110 に答える