• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Request funktioniert nicht

Schrubber

New member
Hallo,

ich sitze gerade an einer Chrome-Browser-App & habe bisher folgenden Code:

Code:
document.addEventListener('DOMContentLoaded', function() {

	var uploadBookmarkButton = document.getElementById('buttonUpload');
	var downloadBookmarkButton = document.getElementById('buttonDownload');
	
	uploadBookmarkButton.addEventListener('click', function() {
	
	var request = '';
	var dataBooks = '';
	
	if (request) {
		request.abort();
	}
	
	dataBooks = 'TestDaten';
	
	request = $.ajax({
		url: "http://example.com/boogle.php",
		type: "post",
		dataType: "jsonp",
		data: dataBooks
	}).done(function (response, textStatus, jqXHR){
		window.alert("Success Alert");
	}).fail(function (jqXHR, textStatus, errorThrown){
		window.alert("Failure Alert");
	});

	event.preventDefault();
});
}, false);

Sinn der Funktion: Mein PHP-Skript auf meinem Webserver bekommt entweder eine Anfrage nach Daten oder einen Datensatz. Das obrige Skript sollte die Datei auf meinem Server ansprechen, die dortige Weiterverarbeitung steht schon. Nun bekomme ich es aber nicht hin dass der Verbindungsaufbau getätigt wird. Meine App meldet weder das .fail-, noch das .done-Event zurück. Wenn ich vor der "request = [...]"-Zeile & ganz am Ende ein window.alert() zum Test packe, wird der NACH dem Request nicht ausgeführt. Heißt also: Der Verbindungsaufbau funktioniert nicht. Die Datei jedoch ist da & lässt sich auch per "$.ajax({url: 'http://example.com/boogle.php'});" ansprechen. Diese sieht wie folgt aus:

PHP:
<?php 
	header('content-type: application/json; charset=utf-8');
	$myFile = fopen("Testdatei.txt", "w");
	fclose($myFile);
?>

Nach manuellem Aufruf der .php-Datei erstellt sich die Datei, aber beim Aufruf durch die App nicht...

Also stimmt etwas am Aufbau meines Requests nicht. Hab aber absolut keine Ahnung woran es hapert :/


Jemand eine Idee?


Grüße,
Schrubber
 
Zuletzt bearbeitet:
Als Ausgabe bekomme ich "$ is not defined"... Meine HTML-Code schaut aber wie folgt aus:

HTML:
<!doctype html>
<html>
  <head>
    <title>Boogle - Chrome Bookmark Synchronizer</title>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
	<script src="./popup.js"></script>
  </head>
  <body>
    <h1>Boogle</h1>
    <form id="formUpload">
	<input type="submit" id="buttonUpload" value="Upload" />
    </form>
    <form id="formDownload">
        <input type="submit" id="buttonDownload" value="Download" />
    </form>
  </body>
</html>
 
Deine PHP-Datei scheint mir jsonp nicht sauber zu implementieren.

Ich würde ja statt dessen normales JSON verwenden und die CORS-Header richtig setzen, damit dir die SOP nicht im Weg steht.

@tsseh: Wenn das JSON invalid wäre, müsse dann nicht das .fail ausgeführt werden?
 
Hmm... das ist alles recht kompliziert für mich.

Ich hab nämlich absolut keine Ahnung wie ich die PHP-Datei aufbauen muss damit man über getJSON oder ähnliches genau die Daten bekomme die ich will :/

Ich habe aktuell 2 Funktionen in der PHP-Datei. Die eine liest eine DB anhand von eines Wertes aus welche über die URL an das Skript übergeben wird. Die andere schreibt in die DB anhand der Werte die ich übergebe. Das ganze mache ich über die POST-Funktion von javaScript. $_POST['action'] gibt an ob upload oder download, $_POST['value'] den Suchstring (für den Download) oder die neuen Werte (für den Upload). Soweit so gut. Nun muss ich ja die .PHP-Datei aufrufen mit den beiden Werten. Wenn ich nun aber als echo die Werte ausgebe bekomme ich über $.getJSON() den gesamten Quelltext der Seite ausgegeben. Gibts da nen Kniff?
 
die $ Fehlermeldung kann auch kommen wenn jQuery nicht geladen wurde.
ja, er zieht es über google, die schalten das cdn ab, oder haben das schon.

@tsseh: Wenn das JSON invalid wäre, müsse dann nicht das .fail ausgeführt werden?
laut docu "any malformed JSON is rejected and a parse error is thrown."
würde ich als exception interpretieren, wenn ich es wörtlich nehme

- - - Aktualisiert - - -

war google code, keine ahnung ob das auch die cdn betrifft
Google Code wird eingestellt | heise Developer
 
Zuletzt bearbeitet von einem Moderator:
Naja - bisher so:

PHP:
<?php
	// $action -> Upload or Download
	// $value -> Bookmarks to upload
	// $user -> google-userid
	$action = '';
	$value = '';
	$user = '';
	
	$action = $_POST['action']; 
	$value = $_POST['value'];
	$user = $_POST['user'];
	
	if (isset($action) && isset($user)) {
		switch ($action) {
			case 'upload':
				performUpload($user, $value);
				break;
				
			case 'download':
				performDownload($user);
				break;
				
			default:
				return false;
		}	
	}
	
	function performUpload($pUser, $pValue) {
		if ($pUser <> '' && $pValue <> '') {
			$query = "INSERT INTO boogle VALUES (NULL, '" + $pUser + "', '" + $pValue + "', '" + DateTime()->format('d-m-Y H:i:s') + "')";
			processData($query, "1");
			echo 'Upload was successful';
			return true;
		} else {
			echo 'Upload failed';
			return false;
		}
	}
	
	function performDownload($pUser) {
		if ($pUser <> '') {
			$query = "Select * from boogle WHERE author = '" + $pUser + "'";
			processData($query, "0");
			echo 'Download was successful';
			return true;
		} else {
			echo 'Download failed';
			return false;
		}
	}
	
	// $type -> 0=SELECT, 1=INSERT
	function processData($query, $type) {
		$mysqli = new mysqli('localhost', 'db', 'passwort', 'db1700409');
		switch ($type) {
			case 0:
				if ($result = $mysqli -> query($query)) {
					while ($row = $result -> fetch_assoc()) {
						print_r($row);
					}
				}
				break;
				
			case 1: 
				$mysqli -> query($query);
				break;
				
			default:
				return false;
		}
		$mysqli -> close();
	}	
?>

Hab halt keine Ahnung wie ich jetzt unten unter processData() im case 0 das print_r() ändern muss damit es für JS-verwertbare Daten zurückgibt...
 
Da liegt leider gar nicht das Problem :/ ich will ja erstmal hinbekommen dass mein jS-Skript an meine .php-Datei etwas per POST schickt. Hierbei bekomme ich mitlerweile immer nen "window.alert("Failure Alert");" ausgegeben & er ruft die Datei nicht auf. Habe nämlich zu Testzwecken in meiner .PHP-Datei eine Dateierstellung programmiert & die Datei erscheint nur bei direktem Dateiaufruf...
 
Bist du sicher, dass dir die SOP nicht im Weg ist?
Was steht denn in der Fehlermeldung (also in errorThrown) drin?

laut docu "any malformed JSON is rejected and a parse error is thrown."
würde ich als exception interpretieren, wenn ich es wörtlich nehme
Das steht aber auch
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
und der Fehler wird auch da "hingeschmissen" (gerade getestet).
 
Zurück
Oben