jQuery Mobile を使用して PhoneGap アプリを構築しています。JSONP クロスドメイン通信は機能しますが、jQuery Mobile が含まれていると問題が発生します。 それがなければ、すべてが期待どおりに機能し、機能しなくなります。
コードを最も単純な形式に減らしました - JSONP を使用して、データをシリアル化し、クロスドメイン PHP ファイルをエンコードして呼び出します。成功関数を実行します。悪いJSかもしれないと思ったのですが、「アラート」が機能し、JSエラーはありません。しかし、 $('#section1').html("SECTION 1 - " + data.message); 更新しません。 注: jQM を削除すると、すべて機能します。
以下は、HTML とそれが呼び出す PHP コードです。jQueryMobile AJAX 呼び出しが .html コードの更新を妨害しているようです。何か案は?私は困惑しています。
Ajax4d.htm
<html><head><title>First jQueryMobile Example</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script>
$(document).ready(function() {
$("#foo").submit(function(event) {
event.preventDefault();
var $form = $(this),
$inputs = $form.find("input, select, button, textarea"),
serializedData = $form.serialize();
var postData = serializedData;
var urlStr = "http://www.fohost.co/testURLd.php?";
alert (urlStr + encodeURI(postData));
$.ajax({
url: urlStr,
data: encodeURI(postData),
dataType: "jsonp",
success: function(data){
alert("SUCCESS callback before HTML update: " + data.message);
$('#section1').html("SECTION 1 - " + data.message);
}
});
});
});
</script>
</head>
<body>
<section id="register_page" data-role="page" data-theme="b">
<div data-role="content">
<form id="foo" method="get" action="">
<fieldset data-role="fieldcontain">
<label for="username">Username:</label>
<input type="text" name="username" id="username" value="Chris" placeholder="Username"/>
</fieldset>
<fieldset class="ui-grid-a"><input type="submit" value="Send" /></fieldset>
</form>
</div>
<div id="section1">SECTION</div>
</section>
</body>
</html>
testURLd.php
<?php
header("content-type: application/json");
$user = $_GET['username'];
$rtnjsonobj->success = "true";
$rtnjsonobj->user = $user;
$rtnjsonobj->message = "Stored User: " . $user;
echo $_GET['callback']. '('. json_encode($rtnjsonobj) . ')';
?>